public void batchUpdate(String indexType ,String userId, Integer cyberStartId, String cyberStarName, Integer mcnOrganId, String mcnOrganName) throws IOException {
final BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("user_id", userId));
HashMap<String, Object> params = new HashMap<>();
if (cyberStartId != null) {
params.put("cyber_start_id", cyberStartId);
}
if (StringUtils.isNotEmpty(cyberStarName)) {
params.put("cyber_star_name", cyberStarName);
}
if (mcnOrganId != null) {
params.put("mcn_organ_id", mcnOrganId);
}
if (StringUtils.isNotEmpty(mcnOrganName)) {
params.put("mcn_organ_name", mcnOrganName);
}
StringBuilder sb = new StringBuilder();
if (params.containsKey("cyber_start_id")) {
sb.append("ctx._source.cyber_start_id = params.cyber_start_id;");
}
if (params.containsKey("cyber_star_name")) {
sb.append("ctx._source.cyber_star_name = params.cyber_star_name;");
}
if (params.containsKey("mcn_organ_id")) {
sb.append("ctx._source.mcn_organ_id = params.mcn_organ_id;");
}
if (params.containsKey("mcn_organ_name")) {
sb.append("ctx._source.mcn_organ_name = params.mcn_organ_name;");
}
final Script script = new Script(ScriptType.INLINE, "painless", sb.toString(), params);
updateByQuery(queryBuilder, indexType, script);
}
public void updateByQuery(QueryBuilder queryBuilder, String index, Script script) throws IOException {
UpdateByQueryRequest request = new UpdateByQueryRequest(index);
request.setConflicts("proceed");
request.setQuery(queryBuilder);
request.setMaxDocs(10000);
request.setScript(script);
try {
BulkByScrollResponse response = restHighLevelClient.updateByQuery(request, RequestOptions.DEFAULT);
// 处理响应结果
} catch (Exception e) {
// 处理异常
}
}
ES7.x 根据非id字段更新,结合painless 和 script脚本【未测试】
最新推荐文章于 2024-03-29 10:25:47 发布
文章描述了一个使用ElasticsearchAPI进行批量更新文档的方法,涉及构建布尔查询、参数化条件、Painless脚本以及UpdateByQuery请求的实现过程。
摘要由CSDN通过智能技术生成