elasticsearch 批量转储数十万个文件

elasticsearch bulk dump hundreds of thousands documents

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 云存储中,格式为 JSON(换行符分隔)。文件中有数十万或数百万个相同格式的文档(elasticsearch 的相同 index/type 元数据)。

要将此 Google 云存储文件批量转储到 Elasticsearch,我必须读入此文件并循环遍历此文件中的每个文档,为每个文档分配相同的元数据,然后最后批量转储到弹性搜索。

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

知道 Elasticsearch bulk API 还没有提供这个功能。

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

所以其他人可能已经 运行 进入这个用例并解决了问题。

有什么经验和建议吗?

谢谢!

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