es查询字段更新记录,Elasticsearch根据搜索查询更新整个_source字段

"_source": {

"id": "5b1676493d21784208c36041",

"label": "name",

"properties": {

"name": "patrick"

},

"updatedAt": 1528259039542

}

I want to update this document based on id (not _id) with a new document.

Something like this:

"_source": {

"dataSource": "ELASTIC",

"entity": "vertices",

"label": "vertices",

"id": "5b1676493d21784208c36041",

"properties": {

"name": "patrick"

},

"updatedAt": 1528259039542

}

elasticsearch version: 6.2, ES Java api: 6.2

解决方案

You can achieve what you want using the update by query API, basically like this:

POST index/_update_by_query

{

"query": {

"match": {

"id": "5b1676493d21784208c36041"

}

},

"script": {

"source": "ctx._source = params",

"params": {

"dataSource": "ELASTIC",

"entity": "vertices",

"label": "vertices"

}

}

}

UPDATE: Using the Java API

Map params = new HashMap<>();

params.put("dataSource", "ELASTIC");

params.put("entity", "vertices");

params.put("label", "vertices");

UpdateByQueryRequestBuilder updateByQuery = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);

updateByQuery.source("index")

.filter(QueryBuilders.matchQuery("id", "5b1676493d21784208c36041"))

.size(1000)

.script(new Script(ScriptType.INLINE, "painless", "ctx._source.putAll(params)", params));

BulkByScrollResponse response = updateByQuery.get();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值