elasticsearch,updates,Java,elasticsearch,Updates" /> elasticsearch,updates,Java,elasticsearch,Updates" />

Java 如何检测Elasticsearch中的文档更新是否失败

Java 如何检测Elasticsearch中的文档更新是否失败,java,elasticsearch,updates,Java,elasticsearch,Updates,我正在使用JavaAPI更新Elasticsearch中的一个文档,但它有时会在没有任何指示的情况下失败(可能是十分之一)。查看更新是否成功的唯一方法是阅读文档以检查是否已更新 IndexResponse有一个名为isCreated的方法,正如其名称所示,只有在成功插入时,它才会返回true。无论更新是否成功,此方法在更新时都将返回false 以下是我更新文档的代码: IndexRequest indexRequest = new IndexRequest(index_name, type_na

我正在使用JavaAPI更新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
,并且没有额外的方法来指示更新的状态,至少据我所知。

从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
统计成功操作的数量。一个文档总是存在于一个碎片中,我认为这两个数字是不可比较的,或者至少我的理解是这样的。从未经历过,但可能
成功
会计算成功操作的复制次数。