项目中有个需求是通过条件去批量修改某个或多个字段,在网上找了半天找到批量修改方法api但是有个问题就是这个使用的ElasticsearchClient连接,然而我用的是RestHighLevelClient不好使。
经过一番摸索搜索后发现RestHighLevelClient也提供了updateByQuery,废话不多说下面是具体用法。
public Boolean updateByQuery(RestHightLevelClient client){
UpdateByQueryRequest updateByQuery = new UpdateByQueryRequest("索引名");
//设置分片并行
updateByQuery.setSlices(2);
//设置版本冲突时继续执行
updateByQuery.setConflicts("proceed");
//设置更新完成后刷新索引 ps很重要如果不加可能数据不会实时刷新
updateByQuery.setRefresh(true);
//查询条件如果是and关系使用must 如何是or关系使用should
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("age","24"))
.should(QueryBuilders.termQuery("name","张三"))
updateByQuery.setQuery(boolQueryBuilder);
//设置要修改的内容可以多个值多个用;隔开
updateByQuery.setScript(new Script("ctx._source['addr']='北京'"));
try {
BulkByScrollResponse response = client.
updateByQuery(updateByQuery,RequestOptions.DEFAULT)
return response.getStatus().getUpdated() > 0?true:false;
} catch (IOException e) {
e.printStackTrace();
}
}