直接上代码
Map<String, Object> params = new HashMap<>();
params.put("answerCount", 10);
params.put("content", "ooooo");
第一种
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.doc(params);
UpdateQueryBuilder updateQueryBuilder = new UpdateQueryBuilder();
updateQueryBuilder.withId("5e6b57f9bfc498493699aadc");
updateQueryBuilder.withUpdateRequest(updateRequest);
updateQueryBuilder.withClass(EsTest.class);
UpdateQuery build = updateQueryBuilder.build();
UpdateResponse update1 = elasticsearchTemplate.update(build);
第二种 脚本方式 我这里是想让answerCount再原值上增加 用第一种会直接覆盖
//构建UpdataRequest对象
UpdateRequest updateRequest = new UpdateRequest();
//构架Script对象,这里注意是 org.elasticsearch.script.Script
//"ctx._source['field']='"+ name+"';ctx._source['field']='"+name+"'"
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, Object> map : params.entrySet()) {
sb.append("ctx._source.").append(map.getKey());
if (map.getKey().equals("answerCount")) {
sb.append("+=");
} else {
sb.append("=");
}
sb.append("params.").append(map.getKey()).append(";");
}
String s = sb.toString();
if (";".equals(s.substring(s.length() - 1, s.length()))) {
s = s.substring(0, s.length() - 1);
}
Script script = new Script(Script.DEFAULT_SCRIPT_TYPE, "painless", s, params);
updateRequest.script(script);
//构架UpdateQueryBuilder 对象
UpdateQueryBuilder updateQueryBuilder = new UpdateQueryBuilder();
//设置要修改的_id
updateQueryBuilder.withId(id);
//设置updateRequest对象
updateQueryBuilder.withUpdateRequest(updateRequest);
//设置 class 对象,其实这里用class对象就是要区实体类标注的 index 和 type 也可以直接设置index 和 type
/*
//可以替换成
updateQueryBuilder.withIndexName("your index");
updateQueryBuilder.withType("yourType");
*/
updateQueryBuilder.withClass(clazz);
UpdateQuery build = updateQueryBuilder.build();