【问题标题】:elasticsearch bulk dump hundreds of thousands documentselasticsearch 批量转储数十万个文档
【发布时间】:2017-03-21 23:16:03
【问题描述】:

https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_indexing_documents.html

基于 Elasticsearch API 文档

将数据批量转储到elasticsearch

for($i = 0; $i < 100; $i++) {
  $params['body'][] = [
    'index' => [
        '_index' => 'my_index',
        '_type' => 'my_type',
    ]
  ];

  $params['body'][] = [
    'my_field' => 'my_value',
    'second_field' => 'some more values'
  ];
}

基本上,您遍历每个文档,为每个文档添加相同的元数据,然后调用批量函数来批量转储这些数据。

我在 Google Cloud Storage 中以 JSON(新行分隔)格式保存数据。文件中有数十万或数百万个相同格式的文档(elasticsearch 的相同索引/类型元数据)。

要将此 Google Cloud Storage 文件批量转储到 Elasticsearch,我必须读取此文件并循环浏览此文件中的每个文档,为每个文档分配相同的元数据,然后最后批量转储到 Elasticsearch。

如果我可以只给出一个元数据(基本上这些文档应该被索引的索引和类型)而不是遍历文件并为每个文档添加相同的元数据并给出整个文件,那就太好了(Json 文档以新行分隔),然后批量转储将完成剩下的工作。

知道 Elasticsearch 批量 API 尚未提供此功能。

但我认为保存在 s3 或谷歌云存储中的批量转储 json 文件到 elasticsearch 是常见的需求。

所以其他人可能已经遇到了这个用例并解决了这个问题。

您的经验有什么建议和建议吗?

谢谢!

【问题讨论】:

    标签: elasticsearch bulk-load


    【解决方案1】:

    你必须从 php 做吗?如果没有,我认为elasticdump 应该可以解决问题。它可以从 json 加载数据(看起来也是从 s3 加载数据)并将其插入到 ES 中。如果您的数据位于 GCP 上,您只需从存储中流式加载数据,并将其通过管道传输到 elasticdump

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2020-08-18
      • 2021-11-20
      • 2021-11-20
      • 2014-12-13
      • 1970-01-01
      相关资源
      最近更新 更多