当前位置: 首页 > 面试题库 >

如何使用NEST elasticsearch批量插入Json?

田信然
2023-03-14
问题内容

我正在尝试使用Nest将多个记录插入数据库。使用IndexMany类插入确实可以,但是我还需要通过json字符串插入对象。

我确实在github上进行了查找,并找到了一些如何使用RAWclient的示例。在代码示例下面,我插入json。

    > var twitter = _jsonData;          
    > var result = client.Raw.BulkPost(
    >               new { twitter }
    >               , qs => qs
    >                   //.Replication(ReplicationOptions.Async)
    >                   .Refresh(true)          );

一些其他信息:

jsondata:

tweet tweet1 = new tweet { id = "104", name = "test104", lastname = "test107" }; //ect....
List<tweet> data; //multiple tweet objects are added
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);

var twitter:

{
      "twitter": "[{'name':'test104','lastname':'test107','id':'104'},{'name':'test105','lastname':'test108','id':'105'},{'name':'test106','lastname':'test109','id':'106'}]"
}

我从数据库收到的结果:

{"error":"Unexpected end-of-input: expected close marker for OBJECT (from [Source: [B@10893e4; line: 1, column: 0])\n at [Source: [B@10893e4; line: 2, column: 3]"}

有人知道这个问题可能是什么吗?还是我在json /代码中丢失了什么?


问题答案:

您的json不适合Elasticsearch批量操作。请参阅文档。

在批量请求中,每个数据对象都应带有命令,因为单个批量请求可以包含插入,更新或删除,而不仅仅是插入。所以你的json应该看起来像

  { "index" : { "_index" : "twitter", "_type" : "tweets" } }\n
  {'name':'test104','lastname':'test107','id':'104'}\n
  { "index" : { "_index" : "twitter", "_type" : "tweets" } }\n
  {'name':'test105','lastname':'test108','id':'105'}\n
  { "index" : { "_index" : "twitter", "_type" : "tweets" } }\n
  {'name':'test106','lastname':'test109','id':'106'}\n

为了减少重复命令的开销,您可以将一些参数移至请求uri。然后json可以更短:

  { "index" : { } }\n
  {'name':'test104','lastname':'test107','id':'104'}\n

在IRawElasticClient中,这意味着将它们移至BulkPost参数。

  var result = client.Raw.BulkPost(new { twitter }, "twitter", "tweets");


 类似资料:
  • 本文向大家介绍如何执行批量插入?相关面试题,主要包含被问及如何执行批量插入?时的应答技巧和注意事项,需要的朋友参考一下 首先,创建一个简单的 insert 语句:   然后在 java 代码中像下面这样执行批处理插入:

  • 问题内容: 我在使用Mongoskin在Node上执行批量插入(MongoDB 2.6+)时遇到麻烦。 上面的代码给出以下警告/错误: 是否可以使用Mongoskin执行无序批量操作?如果是这样,我在做什么错? 问题答案: 您可以执行此操作,但是您需要更改调用约定才能执行此操作,因为只有“回调”形式实际上会返回可以从其调用方法的集合对象。您认为此用法的方式也存在一些差异: 因此,实际的“批量”方法

  • 问题内容: 我有一些每月的天气数据,我想插入到Oracle数据库表中,但是我想成批插入相应的记录,以提高效率。谁能建议我如何用Python做到这一点? 例如,假设我的表有四个字段:工作站ID,日期和两个值字段。记录由工作站ID和日期字段(复合键)唯一标识。我将为每个站点插入的值将保存在一个列表中,其中包含X整整年的数据值,因此,例如,如果有两年的值,则值列表将包含24个值。 如果我想一次插入一条记

  • 问题内容: 使用hibernate时,当我尝试使用以下方式启用批量插入时 我得到以下输出: 然后这个: 基本上没有。 我是否缺少设置? 问题答案: 原来在这种情况下缺少的是: 现在我明白了 频繁得多(任何大于1的值基本上都意味着它成功完成了批量插入)。 hibernate.jdbc.batch_versioned_data也可能有用。 jdbc:mysql:// localhost:3306 /

  • 问题内容: 如果使用https://github.com/felixge/node- mysql之类的 东西,如何将大量插入MySQL中 问题答案: 使用嵌套数组可以进行大容量插入,请参见github页面 嵌套数组变成分组列表(用于批量插入),例如 变成 您只需插入一个嵌套的元素数组。 这里给出一个例子 注意:是一个包装在数组中的数组数组 还有用于批量插入的完全不同的node-msql软件包

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出