Java 如何检测Elasticsearch中的文档更新是否失败
我正在使用JavaAPI更新Elasticsearch中的一个文档,但它有时会在没有任何指示的情况下失败(可能是十分之一)。查看更新是否成功的唯一方法是阅读文档以检查是否已更新Java 如何检测Elasticsearch中的文档更新是否失败,java,elasticsearch,updates,Java,elasticsearch,Updates,我正在使用JavaAPI更新Elasticsearch中的一个文档,但它有时会在没有任何指示的情况下失败(可能是十分之一)。查看更新是否成功的唯一方法是阅读文档以检查是否已更新 IndexResponse有一个名为isCreated的方法,正如其名称所示,只有在成功插入时,它才会返回true。无论更新是否成功,此方法在更新时都将返回false 以下是我更新文档的代码: IndexRequest indexRequest = new IndexRequest(index_name, type_na
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
,并且没有额外的方法来指示更新的状态,至少据我所知。从UpdateResponse,您可以检索ShardInfo
实例,其中包含失败的和成功的碎片操作的数量。如果失败:0
,则操作成功的几率很高
int failed = response.getShardInfo().getFailed()
我认为您需要获取文档并在更新后检查它。当操作失败时,getShardInfo()
类似于:{“总计”:0,“成功”:0,“失败”:0}
,但其他时候它是{“总计”:2,“成功”:1,“失败”:0}
,那么总计:0
很好地表明没有发生任何操作。为了正确执行,您应该检查total>0
和total==successful
我相信total
不是指文档的数量,而是指碎片的数量之类的。我不确定。但我只更新了一个文档,而不是两个!是,ShardInfo
表示。。。碎片信息total
是碎片操作的数量,但正如我所说的,如果total>0
和total==成功
,则很好地表明更新进行顺利。抱歉,我必须完成我的句子。在我的例子中,successful
总是1
,total
总是2
!即使手术成功,他们也不匹配。我认为total
统计碎片的数量,successful
统计成功操作的数量。一个文档总是存在于一个碎片中,我认为这两个数字是不可比较的,或者至少我的理解是这样的。从未经历过,但可能成功
会计算成功操作的复制次数。