2017-01-03 40 views
1

我一次發送1000到Elasticsearch Bulk API與劇本很慢Elasticsearch批量更新

我有我想要的更新文檔,相當於兩個領域在同一乘法內場的場景文件。這是我如何通過PHP客戶端建立我的查詢

{ "update" : { "_id" : "0", "_type" : "type1", "_index" : "index1"} } 
{ "script" : { "inline": "ctx._source.x=ctx._source.y*ctx._source.z"} } 

我使用PHP客戶端爲此一次發送1000。

總共需要185000條記錄,需要30分鐘。有什麼辦法可以優化它嗎?

+0

您是否嘗試過update_by_query? –

+0

我不能在這種情況下使用update_by_query,因爲我有一套我必須執行此更新查詢大致像100k以上的ID。並且每個項目具有乘法的唯一值。查詢更新適用於一組結果並且無法訪問每個單獨文檔的ctx.source.field的情況。 –

+1

通過從5.0開始的查詢更新支持腳本。至於Ids問題,您可以分批分批列出併發送多個update_by_query請求。無論如何,對100K記錄的重新索引將花費幾分鐘時間。如果你負擔不起,你必須找到其他方法。 –

回答

1

如果你的腳本不同於文檔,只能通過因子/參數創建文檔,那麼你可以創建適當的存儲腳本,然後在部分更新中使用它,每個文檔具有唯一的參數值。這種方式彈性不會爲每個文檔的腳本重新編譯打擾,並且批量請求的字節有效載荷將顯着縮小。