2016-08-19 81 views
-1

有什麼方法可以更新elasticsearch中的所有數據。更新所有數據elasticsearch

在下面的示例中,更新爲外部'1'完成。

curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d ' 
{ 
"doc": { "name": "Jane Doe", "age": 20 } 
}' 

同樣,我需要在外部更新我所有的數據。有沒有更新所有數據的方法或查詢?

+0

這個答案應該有幫助:http://stackoverflow.com/questions/38636348/find-and-replace-in-elasticsearch-all-documents/38636633#38636633如果你運行ES 1.3.2,你需要預先安裝[update-by-query](https://github.com/yakaz/elasticsearch-action-updatebyquery)插件,然後重新啓動集羣 – Val

+0

val在上面的鏈接中,它們替換了名稱。在這裏,我需要在我的所有外部添加額外的字段(「狀態」:「完成」),爲此我需要做的。 – venkat

+0

您可以在腳本中進行很多更改,例如添加新字段,更改現有字段並刪除現有字段。 – Val

回答

1

更新索引中的所有文檔意味着將刪除所有文檔並將新索引編入索引。這意味着大量的"marked-as-deleted"文件。

當你運行一個查詢ES會自動過濾掉那些「標記的爲缺失」的文件,這將對查詢的響應時間的影響。它對數據,用例和查詢有多大的影響。

此外,如果您更新所有文檔,除非運行_force_merge,否則會有段(尤其是較大的段)仍然具有「標記爲已刪除」文檔,並且這些段很難由Lucene自動合併/ Elasticsearch。

我的建議是,如果您的索引過程不太複雜(例如從關係數據庫中獲取數據並在索引到ES之前處理數據),則應完全刪除索引並索引新數據。它可能比更新所有文檔更有效。

+0

但我有大量的數據,我需要更新這些。有沒有什麼方法或可能合併或更新,而不丟棄。 – venkat

+0

你可以更新所有的索引,但最終你不會有像索引一樣的索引。您將擁有一些帶有「標記爲已刪除」文件的索引。你需要運行[強制合併](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html)。您仍然可以更新所有文檔並且不強制合併,但是由於仍存在標記爲已刪除的文檔,因此可能會在查詢時影響性能。 –

相關問題