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

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.lryc.cn/news/457940.html

相关文章:

  • 从认识String类,到走进String类的世界
  • Vue入门-指令修饰符-@keyup.enter
  • 【Kubernetes】常见面试题汇总(五十九)
  • 【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤
  • SpinalHDL之设计错误(Design Errors)(一)
  • QT + opengl 让2d贴图动起来
  • 【selenium】webdriver测试脚本
  • 工业自动化中的关键信号:开关量、模拟量与脉冲量
  • VMware vCenter Server 8.0U3c 发布下载,修复 U3b 更新停止响应的问题
  • Java面试宝典-Java集合02
  • HJ212-2017协议详解:工业物联网环境监测标准简单了解
  • 【Golang】Go语言Seeker接口与文件断点续传实战
  • 【MySQL】基本查询(下):更新、删除
  • django urlconf路由分发
  • The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)
  • TensorFlow与Pytorch的转换——1简单线性回归
  • 短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码
  • AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖
  • 六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询
  • 按分类调用标签 调用指定分类下的TAG
  • 报错 - llama-index pydantic error | arbitrary_types_allowed | PydanticUserError
  • PostgreSQL Docker Error – 5432: 地址已被占用
  • 【LeetCode】动态规划—646. 最长数对链(附完整Python/C++代码)
  • 数字媒体产业园区:创新资源集聚,助力企业成长
  • 【Linux】来查看当前系统的架构
  • QT中的信号槽
  • 域名怎么转让给别人?
  • 计算机网络思维导图
  • 07.useDefault
  • git更加详细和灵活的提交过程,附带如何配置. gitignore来忽略部分文件的提交。