【问题标题】:How to bulk insert Json using NEST elasticsearch?如何使用 NEST elasticsearch 批量插入 Json?
【发布时间】:2014-02-25 14:56:05
【问题描述】:

我正在尝试使用 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/code 中遗漏了什么?

【问题讨论】:

    标签: c# json elasticsearch nest


    【解决方案1】:

    您的 json 对于 elasticsearch 批量操作不正确。请参阅documentation

    在批量请求中,每个数据对象之前都应该有一个命令,因为单个批量请求可以包含插入、更新或删除,而不仅仅是插入。 所以你的 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");
    

    【讨论】:

    • 谢谢,您上次的编辑确实有效。似乎我错过了关于 json 格式的文档以进行批量处理。
    • 批量看起来有很多开销,还有另一种方法吗?例如,只有 1 个运算符,数据将是相同的格式。
    • 我不认为有其他的膨胀方式。但是可以使用更短的命令。查看编辑。
    • 现在一年后,似乎 client.Raw.BulkPost() 在 NEST 中不可用。如何使用当前版本进行批量调用?
    • 现在是client.LowLevel.Bulk()。
    猜你喜欢
    • 2015-08-18
    • 2022-08-10
    • 1970-01-01
    • 2021-05-12
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多