如何检测 Elasticsearch 中的文档更新是否失败
How to detect if a document update in Elasticsearch has failed
我正在使用 Java API 更新 Elasticsearch 中的文档,有时它会在没有任何迹象的情况下失败(可能是十分之一)。唯一能看到更新是否成功的方法就是阅读文档查看是否已经更新。
IndexResponse
有一个名为 isCreated
的方法,正如其名称所示,只有在成功插入时才 return 为真。无论更新成功与否,此方法都会 return 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
并且没有额外的方法来指示更新的状态,或者至少据我所知。
从 UpdateResponse 中,您可以检索一个 ShardInfo
实例,其中包含 failed
和 successful
分片操作的数量。如果 failed: 0
,操作成功的几率很高。
int failed = response.getShardInfo().getFailed()
我正在使用 Java API 更新 Elasticsearch 中的文档,有时它会在没有任何迹象的情况下失败(可能是十分之一)。唯一能看到更新是否成功的方法就是阅读文档查看是否已经更新。
IndexResponse
有一个名为 isCreated
的方法,正如其名称所示,只有在成功插入时才 return 为真。无论更新成功与否,此方法都会 return 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
并且没有额外的方法来指示更新的状态,或者至少据我所知。
从 UpdateResponse 中,您可以检索一个 ShardInfo
实例,其中包含 failed
和 successful
分片操作的数量。如果 failed: 0
,操作成功的几率很高。
int failed = response.getShardInfo().getFailed()