将许多JSON对象索引到Elasticsearch中 - 这是规范的方式

时间:2016-07-29 12:08:30

标签: python json elasticsearch jq

这是我一直面临的一个场景,我怀疑我采取的解决方案是规范/智能解决方案。假设您有一个文件,其中每一行都是有效的JSON。此外,每个对象都包含一个字段typeid,并且这些对是唯一的。我的目标是将所有对象索引到ES集群上的索引中。到目前为止,我采取了两种方法:

bulk API与jq一起使用,例如:

$ cat foo.json | jq -c '. | {"index": {"_index": "your_test_index", "_type": "doc_type"}}, .' | curl -XPOST localhost:9200/_bulk --data-binary @-

这非常好用,但速度太慢了。

我也尝试使用Python客户端,但我仍然需要逐行阅读并逐一索引它们。

有没有办法“推”整个文件并指示ES以同样的方式处理所有行?或者换句话说,以批处理方式索引大量JSON对象的有效方法是什么?

1 个答案:

答案 0 :(得分:0)

绝对是bulk方法。但是你需要做更多的工作,因为它不像创建一个文件那样容易,将它发送给ES并期望它处理它。

如果文件太大,当然会很困难。 请阅读文档的这一部分,特别是最后一部分,它描述了您需要如何确定批量批量的大小:https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html

每个集群都有自己的特点,每个集群甚至可以处理一定数量的批次/特定数量的并发批次。这取决于您的具体情况,请测试此并确定您的特定用例的最佳数字。