2017-06-02 63 views
0

假設我有1000個用戶,每個用戶有50個文檔(每個文檔嵌入具有名稱和電子郵件的用戶對象),我需要爲一組用戶更新名稱和電子郵件。我可以通過ElasticSearch Bulk API中的查詢進行更新嗎?

我想使用批量API,但似乎批量API只支持「_id」作爲參數。我想提出一個查詢,而不是

例如:我想這樣做,

POST _bulk 
{ "update" : {"query" : {"terms": {"userId": "25"}}, "_type" : "comments", "_index" : "comments"} } 
{ "doc" : {"user.name" : "new name"} } 

,而不是

POST _bulk 
{ "update" : {"_id" : "1", "_type" : "comments", "_index" : "comments"} } 
{ "doc" : {"user.name" : "new name"} } 

回答

0

可以使用update by query API用於此目的:

POST comments/_update_by_query 
{ 
    "script": { 
    "inline": "ctx._source.user.name = newName", 
    "lang": "painless", 
    "params": { 
     "newName": "new name" 
    } 
    }, 
    "query": { 
    "term": { 
     "userId": "25" 
    } 
    } 
} 
+0

我需要爲所有的用戶做同樣的事情,我可以把相同的查詢放在批量api中嗎? –

+0

如果您需要爲所有用戶執行此操作,則不需要腳本,只需通過批量API發出部分文檔更新即可。 – Val

+0

Bulk API我們需要提及文檔的id,但是我沒有這個id。 –

相關問題