通过查询更新 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();
我是 运行 使用 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();