由于ElasticsearchRestTemplate对RestHighLevelClient 进一步的封装,因此对updateByQuery的摸索过程记录
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().filter(QueryBuilders.nestedQuery("rule_info_list",QueryBuilders.termQuery("rule_info_list.id", ruleId)
, ScoreMode.None)).filter(QueryBuilders.termQuery("url", url));
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder);
Map map = new HashMap<>();
map.put("ruleId", ruleId); map.put("status", status);
UpdateQuery build = UpdateQuery.builder(nativeSearchQuery)
.withScript("for (int i = 0; i < ctx._source.rule_info_list.size(); ++i) { if (ctx._source.rule_info_list[i].id == params.ruleId) { ctx._source.rule_info_list[i].status = params.status; break; } }")
.withScriptType(ScriptType.INLINE)
.withParams(map)
.build();
ByQueryResponse byQueryResponse = elasticsearchWriterClientTemplate.updateByQuery(build, IndexCoordinates.of(indexName));
如果使用如下图的方式,会导致script构造的时候出现语法错误
此测试过程历时几个小时文章来源:https://www.toymoban.com/news/detail-730144.html
** 另外还需要注意elasticsearch中该字段的数据类型存储,在进行Query构建时,需要与elasticsearch中保持一致文章来源地址https://www.toymoban.com/news/detail-730144.html
到了这里,关于记录Springboot使用ElasticsearchRestTemplate的updateByQuery的用法的坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!