【问题标题】:Bulk indexing using elastic search使用弹性搜索进行批量索引
【发布时间】:2016-06-20 19:49:42
【问题描述】:

到目前为止,我一直在逐个文档地将数据索引到弹性文档,现在随着数据开始增加,它变得非常缓慢,而且不是一种优化的方法。所以我正在寻找一个批量插入的东西,并找到了 Elastic Bulk API。从他们官方网站上的文件中,我感到困惑。我使用的方法是将数据作为 WebRequest 传递并在弹性服务器中执行它们。因此,在创建批量/批量插入请求时,API 希望我们形成一个模板,如

localhost:9200/_bulk as URL and 
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }

用 id 1 和 field1 值作为值 1 来索引文档。API 还建议将数据作为 JSON 发送(不漂亮,保持非转义字符左右)。因此,要传递具有多个属性的多个文档,我该如何构建我的数据。

我在 FF RestClient 中尝试过这样的操作,POST 和标头为 JSON,但 RestClient 抛出了一些错误,我知道它不是有效的 JSON

{ "index" : { "_index" : "indexName", "_type" : "type1", "_id" : "111" },
{ "Name" : "CHRIS","Age" : "23" },"Gender" : "M"}

【问题讨论】:

  • 第一行之后不需要逗号,而且第一行缺少结束 }。此外,您在第二行中间有一个结束 },您也需要将其删除。
  • 作为 Val,我们需要在脚本末尾再添加一行!

标签: elasticsearch


【解决方案1】:

您的数据格式不正确:

  1. 第一行后不需要逗号
  2. 您在第一行缺少结束 }
  3. 您的第二行中间有一个结束 },您也需要将其删除。

为批量插入格式化数据的正确方法如下所示:

curl -XPOST localhost:9200/_bulk -d '
{ "index" : { "_index" : "indexName", "_type" : "type1", "_id" : "111" }}
{ "Name" : "CHRIS","Age" : "23" ,"Gender" : "M"}
-H 'Content-Type: application/x-ndjson'

这会起作用。

更新

在 Chrome 上使用 Postman,它看起来像这样。确保在第 2 行之后添加新行:

【讨论】:

  • Val,很抱歉在我的问题中提供了错误的输入。我会尽力让你知道的。 :)
  • 我尝试通过 FF 的 rest 客户端,它抛出了错误的请求,验证失败:1:没有添加请求;
  • 您是如何尝试的?请注意,内容不是 JSON,而是自定义格式(因此您不能使用 JSON 标头)。可以分享截图吗?你可以直接在你的 shell 中尝试 curl 吗?
  • 嗨,它成功了!!!谢谢。我想这是一些 RestClient 问题。我拿了一个新标签来提供内容,并且我将内容类型指定为 JSON,并且似乎工作正常。 :)
  • 是否可以删除 Elastic 中的类型。我发现在 1.5.4 版本之后它不再可能,只是为了确保
【解决方案2】:

使用 elasticsearch 7.9.2

为了发送批量更新,我收到如下新行错误

没有新行更新失败

这很奇怪,但是在所有操作的最后一个添加新行后,它与邮递员一起工作正常,请注意下面屏幕截图中的第 5 行

在 postman 的所有命令的最后添加换行符后批量更新成功

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2016-04-13
    • 2017-07-03
    • 2021-08-16
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多