ElasticSearch ES 批量修改 批量修改集合某个属性 脚本修改 javaApi

最近碰到根据条件批量修改某个属性跟集合里面某个属性的业务,自己摸索,给出以下例子

【批量修改根据条件修改某个属性值】

           Map<String,Object> map = new HashMap<String,Object>();
           map.put("tags","blue");
           String idOrCode = "ctx._source.tags=params.tags"
           UpdateByQueryRequestBuilder builder = UpdateByQueryAction.INSTANCE.newRequestBuilder(transportClientForOperate);
           builder.source(index).filter(QueryBuilders.termsQuery(key, ids))
           .script(new Script(ScriptType.INLINE, "painless", idOrCode, map))
           .abortOnVersionConflict(false)    // 设置ES版本导致问题失败是否停止运行
           .get();

参数介绍
QueryBuilders.termsQuery(key, ids)
key 条件字段
ids 条件值,多个就是集合

new Script(ScriptType.INLINE, "painless", idOrCode, map)
idOrCode : 脚本语法 ctx._source.tags="blue"
map : 存储值 (也可以直接在脚本里硬编码,这里就直接写 Collections.emptyMap())

对应es语句

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : {
        "inline": "ctx._source.tags = tag", // 对应api idOrCode
        "params" : { // 对应api map里的键值对
            "tag" : "blue"
        }
    }
}'

重点来了,修改对应集合里的数据怎么修改

例如ES数据存储:

 "tagInfo": [
         {
        "tagId": 1,
        "name": "标签",
        "des": "说明",
        "no": 1
      },
      {
        "tagId": 2,
        "name": "标签2",
        "des": "说明2",
        "no": 2
      }
      ]

api写法

String key = "tagInfo";
String update_key = "name";
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","标签1");  
String idOrCode =
"if (ctx._source.containsKey('"+ key +"')) {for (int i=0;i<ctx._source."+ key  +".size();i++) { ctx._source."+ key +"[i]."+ update_key + "= params.name} }";

重点
if (ctx._source.containsKey('"+ key +"')) {
}
这个判断一定要写不然脚本会报空异常

如果要更改多个值拼接 idOrCode 的时候用;分开就行了哦;

最后看到这里对你有用的话,点个赞分享一下哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、ES概述 1.1、ES介绍 ElasticSearch简称ES,是一个基于Lucene开发的 分布式的全文搜索...
    ST_码阅读 803评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 原本想稍微整理一下 ES 新特性,没想到花了相当多的时间,本文也巨长,依然推荐使用 简悦[https://gith...
    401阅读 1,906评论 0 5
  • 背景 公司需要做一系列的壳版本,壳版本如果内容雷同提交到App Store会有被拒绝的风险,除了我在上一篇文章中说...
    aron1992阅读 2,057评论 6 7
  • ElasticSearch笔记 前言 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 ...
    fanyank阅读 1,090评论 0 2