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
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