当前位置: 首页 > article >正文

ElasticSearch备考 -- Update by query Reindex

一、题目

有个索引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
{
    "query": {
        "match_all": {}
    }
}

方案二:ingest painless + reindex

Step 1、创建 ingest pianless 脚本

获取参数有两种写法

  • ctx.xxx
  • ctx['xxxx']
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进行验证运行时,是否存在错误。
  • 最后一定要检查一下更新后的数据,虽然执行过程中没有报错,但是不代表执行符合预期


参考资料

  • Update By Query API | Elasticsearch Guide [8.1] | Elastic
  • Ingest pipelines | Elasticsearch Guide [8.1] | Elastic
  • Reindex API | Elasticsearch Guide [8.1] | Elastic

送一波福利:

福利一

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

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

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

福利二

福利三


http://www.kler.cn/news/336657.html

相关文章:

  • 富贵险中求,我推荐你读这4本书
  • HTB:Funnel[WriteUP]
  • 【Ubuntu】PlantUML工具 | 安装 | 语法 | 使用工具画序列图
  • 深度学习应用
  • 基于MySQL生成列实现逻辑删除条件下的字段唯一
  • 【艾思科蓝】Java Web开发实战:从零到一构建动态网站
  • Spring和Spring Boot事务讲解和案例示范
  • Chrome浏览器调用ActiveX控件--allWebOffice控件
  • IO重定向
  • Java 中 MySQL 自增 ID 的与案例分析
  • 【unity进阶知识7】对象池的使用,如何封装一个对象池管理器
  • C#基础语法
  • 如何筛选网站有多少真实ip访问
  • Spring MVC的运行流程详解
  • Stable Diffusion的核心插件—ControlNet!万字长文解读!
  • AtCoder ABC374 A-D题解
  • 移动硬盘无法读取?原因、恢复方案与预防措施全解析
  • 【重学 MySQL】六十、空间类型
  • [C++题目]力扣155. 最小栈
  • SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?