ElasticSearch备考 -- Update by query

一、题目

有个索引task,里面的文档长这样

现在需要添加一个字段all,这个字段的值是以下 a、b、c、d字段的值连在一起

二、思考

需要把四个字段拼接到一起,组成一个新的字段,这个就需要脚本,

这里有两种方案,

方案一:可以使用ingest painless脚本,在通过update by query,查询所有数据对索引中文档进行更新

方案二:使用ingest pianless 脚本,然后通过reindex 索引

三、解题

初始化索引和数据

复制代码
DELETE task
PUT task
POST task/_bulk
{"create":{"_id":1}}
{"a":"key","b":"mom","c":"mom","d":1}
{"create":{"_id":2}}
{"a":"key","b":"cake mix","c":"mom","d":2}
{"create":{"_id":3}}
{"a":"key","b":"mom","c":"cake mix","d":3}
{"create":{"_id":4}}
{"a":"cake mix","b":"mom","c":"mom","d":4}

方案一:ingest painless

Step 1、创建 ingest pianless 脚本

  • 脚本可以通过类似python中""" 三引号的方式编写

  • 创建新的字段,需要ctx'xx'指定

  • lang 可以不写,默认为pianless

    PUT _ingest/pipeline/add_all
    {
    "description": "add a+b+c+d = all",
    "processors": [
    {
    "script": {
    "lang": "painless",
    "source": """
    ctx['all'] = ctx['a'] +" "+ ctx['b'] +" "+ ctx['c'] + " "+ ctx['d']
    """
    }
    }
    ]
    }

Step 2、通过update by query 更新文档

update by query 后面如果要使用pianles脚本需要加?并指定脚本的名称

复制代码
POST task/_update_by_query?pipeline=add_all

方案二:ingest painless + reindex

Step 1、创建 ingest pianless 脚本

复制代码
PUT _ingest/pipeline/add_all
{
  "description": "add a+b+c+d = all",
  "processors": [
    {
      "script": {
        "lang": "painless", 
        "source": """ 
          ctx['all'] = ctx['a'] +" "+  ctx['b'] +" "+ ctx['c'] + " "+ ctx['d']
        """ 
      }
    }
  ]
}

Step 2、使用reindex

这个再创建一个新索引,并将数据导入。 注意:pipeline 是写在dest中

复制代码
POST _reindex
{
  "source": {
    "index": "task"
  },
  "dest": {
    "index": "task_new",
    "pipeline": "add_all"
  }
}

四、总结

update by query 通常用于批量更新,可以结合painless 使用

创建脚本后一般都会成功,需要再结合update by query进行验证运行时,是否存在错误。

参考资料

送一波福利:

福利一

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

福利二

福利三

相关推荐
vx-Biye_Design1 小时前
SSM伴侣动物伴护星小程序06330-计算机课程设计、毕业设计
spring boot·后端·elasticsearch·小程序·架构·课程设计·idea
IT研究室2 小时前
最新大数据毕业设计选题推荐-基于大数据的城市交通流量数据可视化分析-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·课程设计
面向Google编程3 小时前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
大数据·后端
大大大大晴天4 小时前
从数仓建模到 AI 数据底座:重新理解数据治理的位置
大数据
微功夫信息技术4 小时前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
不会写代码的女程序猿4 小时前
中小康养门店选型参考|明理 AI 四诊仪场景适配与投入回报分析
大数据·人工智能·科技·ai·健康医疗
云泽8085 小时前
Git 版本控制系统(下):从 .git 目录结构到冲突解决机制详解
大数据·git·elasticsearch
Elastic 中国社区官方博客5 小时前
教程:使用 ES|QL 进行威胁狩猎
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·安全威胁分析
weixin_505061455 小时前
原厂技术协同|世强硬创携手星坤连接解锁 IOTE 高可靠互连解决方案
大数据
乐迪信息5 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪