更新不存在的文档时,弹性搜索不会给我任何错误
Posted
技术标签:
【中文标题】更新不存在的文档时,弹性搜索不会给我任何错误【英文标题】:Elastic Search doesn't give me any error when updating non existent document 【发布时间】:2022-01-11 16:06:27 【问题描述】:我正在使用 Spring Data ElasticSearch(Spring Boot parent v2.6.1,Elastic Search 7.15.2)在 ElasticSearch 中运行 updateByQuery
操作。
在我的 ES 索引中,我存储了 2 个文档。
当我在搜索中给出一个不存在的文档时,它不会给我任何错误,因此我无法区分更新是否实际运行。
现有文档的更新工作正常。我想找到一种方法,如果没有编辑任何行,我可以记录它。
我应该看什么?如果有更新,我应该更改哪些内容才能收到一些消息?
这是我的代码 sn-p:
UpdateByQueryRequest request = new UpdateByQueryRequest('index');
Map<String, Object> data = new HashMap<>();
data.put("marks", "30");
data.put("name", "timmy");
data.put("roll_number", "10");
request.setScript(
new Script(
ScriptType.INLINE, "painless",
"if (ctx._source.name == params.name && ctx._source.roll_number == params.roll_number) ctx._source.marks=params.marks;",
data));
BulkByScrollResponse resp = globalClient.updateByQuery(request, RequestOptions.DEFAULT);
log.info("response: ",resp.getStatus());
我也添加了响应状态。我觉得奇怪的是,在存在和不存在文档的情况下,updated
参数计数为2
,与我索引中的文档数量相同。
记录不存在时的响应:
response: BulkIndexByScrollResponse[sliceId=null,updated=2,created=0,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s]
在现有记录的情况下响应:
response: BulkIndexByScrollResponse[sliceId=null,updated=2,created=0,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s]
【问题讨论】:
【参考方案1】:这是纯 Elasticsearch 代码,没有来自 Spring Data Elasticsearch。
您在哪里指定查询?我在您的代码中没有看到任何内容。这意味着所有文档都将被更新 - 在您的情况下为 2 个。
【讨论】:
我正在关注elastic.co/guide/en/elasticsearch/client/java-rest/current/… 中的脚本示例,其中传递了一个脚本以根据条件修改文档 在该页面上:“您可以通过添加查询来限制文档。”您没有设置查询,这就是所有文档都会更新的原因。 知道了。我的印象是这个脚本也可以用作查询和更新以上是关于更新不存在的文档时,弹性搜索不会给我任何错误的主要内容,如果未能解决你的问题,请参考以下文章