我正在使用Java API更新Elasticsearch中的文档,有时它会在没有任何指示的情况下失败(可能是1/10)。我能看到更新是否成功的唯一方法是阅读文档以检查它是否已更新。
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();
在修复失败的更新之前,我需要检测请求是否成功。但如何?
注:UpdateResponse
继承自IndexResponse
,没有额外的方法来指示更新状态,至少据我所知。
从updaterresponse中,您可以检索ShardInfo
实例,其中包含failed
和successful
分片操作的数量。如果是failed: 0
,操作成功的概率很大。
int failed = response.getShardInfo().getFailed()