elasticsearch批量转储数十万个文档

时间:2017-03-21 23:16:03

标签: elasticsearch bulk-load

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(换行符号换行)格式。文件中有数十万或数百万个相同格式的文档(弹性搜索的索引/类型元数据相同)。

要将此Google云端存储文件批量转储到Elasticsearch,我必须读取此文件并遍历此文件中的每个文档,为每个文档分配相同的元数据,然后最终批量转储到Elasticsearch。

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

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

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

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

根据您的经验提出任何意见和建议?

谢谢!

1 个答案:

答案 0 :(得分:1)

你必须从PHP做到吗?如果没有,我认为elasticdump应该做到这一点。它可以从json加载数据(也可以从s3加载)并将其插入ES。如果您的数据位于GCP上,您只需要从存储中流式加载数据,并将其传输到elasticdump