通过查询更新 Elastic Search 未正确反映更新的文档数量

Elastic Search update by query not reflecting correctly updated number of documents

我是 运行 使用 java 休息客户端的查询调用更新: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-document-update-by-query.html

这是我的代码:(只提取了相关部分并更新了无痛脚本中的一些字段)

UpdateByQueryRequest queryRequest = new UpdateByQueryRequest(indexName);
Script script = new Script(ScriptType.INLINE, "painless", "if (ctx._source.someKey == someVal) {ctx._source.someKey = someOtherVal;}",Collections.emptyMap());
queryRequest.setScript(script);
BulkByScrollResponse bulkResponse = aesClient.updateByQuery(queryRequest, RequestOptions.DEFAULT);

以上代码运行良好,相关文档得到更新。但是每当我执行以下命令时:

long updatedDocs = bulkResponse.getUpdated();

updatedDocs 中存储的值并不反映实际更新的文档数。其中存储的值是它处理的文档数。

根据documentation,应该return更新的文档数。

如有错误请指正。有解决办法吗?

您应该将脚本修改为:

if (ctx._source.someKey == someVal) {ctx._source.someKey = someOtherVal;} else { ctx.op='noop'}

ctx.op='noop' 在 update_by_query documentation

中指定的更新中忽略了该文档

此无操作将报告于:

long noops = bulkResponse.getNoops();