2016-08-13 41 views
2

我正在使用Java API更新Elasticsearch中的文檔,並且在沒有任何提示的情況下(可能是1/10)失敗。我可以看到更新是否成功的唯一方法是閱讀文檔以檢查是否已更新。如何檢測Elasticsearch中的文檔更新是否失敗

IndexResponse有一個名爲isCreated的方法,正如其名稱所示,只有在插入成功後才返回true。無論成功還是失敗,此方法都將在更新上返回false。

這裏是我的代碼,以更新文檔:

IndexRequest indexRequest = new IndexRequest(index_name, type_name, doc_id) 
    .source(json); 

UpdateRequest updateRequest = new UpdateRequest(index_name, type_name, doc_id) 
    .doc(json) 
    .upsert(indexRequest); 

UpdateResponse response = es_client.update(updateRequest).actionGet(); 

之前,我可以修復失敗的更新,我需要檢測,如果該請求已成功與否。但是如何?

P.S. UpdateResponse繼承自IndexResponse並沒有額外的方法來指示更新狀態,或者至少據我所知。

+0

我_think_您需要獲取文檔並在更新後檢查它。 –

回答

2

從UpdateResponse中,您可以檢索到ShardInfo實例,其中包含failedsuccessful分片操作的數量。如果failed: 0,操作成功的機率很高。

int failed = response.getShardInfo().getFailed() 
+0

當操作失敗時,'getShardInfo()'就像:{{「total」:0,「successful」:0,「failed」:0}'但有時候它是'{「total」:2,「successful」 :1,「失敗」:0}' – Mehran

+0

然後'total:0'是一個很好的表示,沒有任何操作發生。爲了正確執行,你應該檢查'total> 0'和'total == successful' – Val

+0

我認爲'total'並不是指文檔的數量,而是指類似碎片的數量或者其他東西。我不確定。但我只更新了一個文檔,而不是兩個! – Mehran