2016-08-13 47 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