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

Gre*_*zer 2 c# json elasticsearch nest

我试图使用Nest在我的数据库中插入多条记录.使用IndexMany类插入确实有效,但我还需要通过json字符串插入对象.

我确实看过github,并找到了一些如何使用RAWclient的例子.在代码示例下面,我插入了我的json.

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

一些额外的信息:

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);
Run Code Online (Sandbox Code Playgroud)

var twitter:

{
      "twitter": "[{'name':'test104','lastname':'test107','id':'104'},{'name':'test105','lastname':'test108','id':'105'},{'name':'test106','lastname':'test109','id':'106'}]"
}
Run Code Online (Sandbox Code Playgroud)

我从数据库收到的结果:

{"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]"}
Run Code Online (Sandbox Code Playgroud)

有谁知道问题可能是什么?或者我的json /代码中缺少什么?

v.s*_*nko 5

您的json对弹性搜索批量操作不正确.请参阅文档.

在批量请求中,每个数据对象都应该以命令开头,因为单个批量请求可以包含插入,更新或删除,而不仅仅是插入.所以你的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
Run Code Online (Sandbox Code Playgroud)

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

  { "index" : { } }\n
  {'name':'test104','lastname':'test107','id':'104'}\n
Run Code Online (Sandbox Code Playgroud)

在IRawElasticClient中,这意味着将它们移动到BulkPost参数.

  var result = client.Raw.BulkPost(new { twitter }, "twitter", "tweets");
Run Code Online (Sandbox Code Playgroud)

  • 一年后,似乎client.Raw.BulkPost()在NEST中不可用.如何使用当前版本进行批量调用? (2认同)
  • 它现在是client.LowLevel.Bulk(). (2认同)