一、需求情景
要求将es中文章信息的所在目录移动到另外的目录上去,可以一次性移动多篇文章到指定目录上。
思路:过滤找到es中需要移动的文章,改变对应的目录id即可。
二、代码实现
执行方法相对比较简单,主要分为构造查询条件和执行查询修改两步,主要运用UpdateByQueryRequest查询操作的方法。
public Long moveCatalogModel(List<String> modelId, String catalogId) throws CetcBigDataException {
long move = 0;
//检测指定目录是否可用
WriteModelCatalog modelCatalogById = writeModelMapper.getModelCatalogById(catalogId);
if (modelCatalogById == null) {
throw new CetcBigDataException("移至目录并非可用目录。");
}
//将es中的docDir字段修改为指定目录字段
BoolQueryBuilder filterQB = QueryBuilders.boolQuery();
if (CollectionUtils.isNotEmpty(modelId)) {
filterQB.must(QueryBuilders.boolQuery()
//查询要修改的结果集
.must(termsQuery(idField, modelId)));
}
//查询一遍,若没有数据则不执行修改