property field java,如何使用java更改Elasticsearch中文档的field属性?

这篇博客介绍了如何在Elasticsearch中通过脚本更新文档内item对象的特定字段,例如将`class`从`ccc`改为`ccc12`。示例代码展示了如何找到匹配的item并修改其字段值,同时提供了批量修改多个字段的方法。
摘要由CSDN通过智能技术生成

I hava a document in Elasticsearch:

{

"_index": "test",

"_type": "document",

"_id": "1",

"_score": 1,

"_source": {

"class": "aaa",

"id": 1,

"items": [{

"class": "aaa",

"id": 1

}, {

"class": "ccc",

"id": 2

}],

"bianhao": "123"

}

}

I want to replace {"class": "ccc","id": 2} of items with {"class": "ccc12","id": 2},how to achieve that?

解决方案

You can do it like this:

Map params = new HashMap<>();

params.put("idParam", 2);

params.put("classParam", "ccc12");

client.prepareUpdate("test", "document", "1")

.setScript(new Script(

"ctx._source.items.find{ it.id == idParam }['class'] = classParam",

ScriptService.ScriptType.INLINE, null, params))

.get();

UPDATE

And if you want to change multiple fields, you can do it like this:

Map params = new HashMap<>();

params.put("idParam", 2);

params.put("classParam", "ccc12");

params.put("field1Param", "value2");

params.put("field2Param", "value3");

client.prepareUpdate("test", "document", "1")

.setScript(new Script(

"def item = ctx._source.items.find{ it.id == idParam}; if (item) {item['class'] = classParam; item['field1'] = field1Param; item['field2'] = field2Param}",

ScriptService.ScriptType.INLINE, null, params))

.get();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值