springboot项目中利用ElasticsearchTemplate更新数据

直接上代码

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值