2016-07-29 46 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