2016-07-29 93 views
2

以下是我继续面对的情况,并且我怀疑我采用的解决方案是规范/智能方案。假设你有一个文件,每一行都是有效的JSON。此外,每个对象都包含一个字段typeid,这些对是唯一的。我的目标是将所有对象索引到ES群集的索引中。到目前为止,我花了两个方法:将许多JSON对象索引到Elasticsearch中 - 规范方式

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

你能定义“大”吗?你有多少行/文档,每个文档有多大? – Val

+0

例如:20-30M文件和总计6-10GB – Dror

回答

0

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

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

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

+0

好点,Andrei加@Dror需要[用不同大小的实验](https://www.elastic.co/guide/en/elasticsearch/) guide/current/indexing-performance.html#_using_and_sizing_bulk_requests),并凭经验确定哪些最适合他的文档集。 – Val

+0

当然。对此没有自动魔法解决方案。总是推荐一些实验。 –

+0

这种方法是不是逐行处理给定的文件,并且“手动”地指导API如何处理每一行?难道没有办法告诉ES以同样的方式处理所有的行吗? – Dror