直接上代码

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();
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐