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

ElasticSearch-Ingest Pipeline Painless Script

  • Ingest Node & Pipeline & Processor
    • Ingest Node
    • Pipeline & Processor
    • 内置的 Processors
    • 创建 pipeline
    • 使用 pipeline 更新数据
    • 借助 update_by_query 更新已存在的文档
    • Ingest Node VS Logstash
  • Painless

Ingest Node & Pipeline & Processor

  • 应用场景: 修复与增强写入数据

  • Ingest Node

    • 默认配置下,每个节点都是 Ingest Node(Elasticsearch 5.0后)
    • 具有预处理数据的能力,可拦截lndex或 Bulk API的请求
    • 对数据进行转换,并重新返回给Index或 Bulk APl
    • 无需Logstash,就可以进行数据的预处理
      • 为某个字段设置默认值
      • 重命名某个字段的字段名
      • 对字段值进行Split 操作
      • 支持设置Painless脚本,对数据进行更加复杂的加工
  • Pipeline & Processor

    • Pipeline:管道会对通过的数据(文档),按照顺序进行加工
    • Processor:Elasticsearch 对一些加工的行为进行了抽象包装
      • Elasticsearch 有很多内置的Processors,也支持通过插件的方式,实现自己的Processor
    • 在这里插入图片描述
  • 内置的 Processors

    • Split Processor : 将给定字段值分成一个数组
    • Remove / Rename Processor :移除一个重命名字段
    • Append : 为商品增加一个新的标签
    • Convert:将商品价格,从字符串转换成float 类型
    • Date / JSON:日期格式转换,字符串转JSON对象
    • Date lndex Name Processor︰将通过该处理器的文档,分配到指定时间格式的索引中
    • Fail Processor︰一旦出现异常,该Pipeline 指定的错误信息能返回给用户
    • Foreach Process︰数组字段,数组的每个元素都会使用到一个相同的处理器
    • Grok Processor︰日志的日期格式切割
    • Gsub / Join / Split︰字符串替换│数组转字符串/字符串转数组
    • Lowercase / upcase︰大小写转换
# 测试 split tags
POST _ingest/pipeline/_simulate
{"pipeline":{"description":"to split blog tags","processors": [{"split":{"field":"tags","separator":","}}]},"docs": [{"_index": "index","_id": "id","_source": {"title": "Introducing big data......", "tags": "hadoop,elasticsearch,spark", "content": "You konw, for big data"}},{"_index":"index","_id":"idxx","_source":{"title":"Introducing cloud computering", "tags":"openstack,k8s","content":"You konw, for cloud"}}]}
# 同时为文档增加一个字段
POST _ingest/pipeline/_simulate
{"pipeline":{"description":"to split blog tags","processors":[{"split":{"field":"tags","separator":","}},{"set":{"field":"views","value":0}}]},"docs": [{"_index":"index","_id":"id","_source":{"title":"Introducing big data......","tags":"hadoop,elasticsearch,spark","content":"You konw, for big data"}},{"_index":"index","_id":"idxx","_source":{"title":"Introducing cloud computering", "tags":"openstack,k8s","content":"You konw, for cloud"}}]}
  • 创建 pipeline
# 为 ES 添加一个 Pipeline
PUT _ingest/pipeline/blog_pipeline 
{"description":"a blog pipeline","processors":[{"split":{"field":"tags","separator":","}},{"set":{"field":"views","value":0}}]}
  • 使用 pipeline 更新数据
# 使用 pipeline 更新数据
PUT tech_blogs/_doc/2?pipeline=blog_pipeline 
{"title":"Introducing cloud computering","tags":"openstack,k8s","content":"You konw, for cloud"}
  • 借助 update_by_query 更新已存在的文档
#增加update_by_query的条件
POST tech_blogs/_update_by_query?pipeline=blog_pipeline 
{"query":{"bool":{"must_not":{"exists":{"field":"views"}}}}}
  • Ingest Node VS Logstash
LogstashIngest Node
数据输入与输出支持从不同的数据源读取,并写
入不同的数据源
支持从 ES REST API 获取数据,
并且写入 Elasticsearch
数据缓冲实现了简单的数据队列,支持重写不支持缓冲
数据处理支持大量的插件,也支持定制开发内置的插件,可以开发Plugin进
行扩展 (Plugin更新需要重启)
配置和使用增加了一定的架构复杂度无需额外部署

Painless

  • Painless 支持所有 Java 的数据类型及 Java API 子集
  • Painless Script 具备以下特性
    • 高性能/安全
    • 支持显示类型或者动态定义类型
  • Painless 的用途
    • 可以对文档字段进行加工处理
      • 更新或删除字段,处理数据聚合操作
      • Script Field: 对返回的字段提前进行计算
      • Function Score: 对文档的算分进行处理
    • 在lngest Pipeline中执行脚本
    • 在Reindex APl,Update By Query时,对数据进行处理
  • 通过Painless脚本访问字段
    • Ingestion: ctx.field_name
    • Update: ctx._source.field_name
    • Search & Aggregation: doc["field_name"]
# 增加一个 Script Prcessor
POST _ingest/pipeline/_simulate
{"pipeline":{"description":"to split blog tags","processors":[{"split":{"field":"tags","separator":","}},{"script":{"source":"""if(ctx.containsKey("content")){ctx.content_length = ctx.content.length(); }else{ctx.content_length=0;}"""}},{"set":{"field":"views","value":0}}]},"docs": [{"_index":"index","_id":"id","_source":{"title":"Introducing big data......", "tags":"hadoop,elasticsearch,spark", "content":"You konw, for big data"}},{"_index":"index","_id":"idxx","_source":{"title":"Introducing cloud computering", "tags":"openstack,k8s","content":"You konw, for cloud"}}]}
PUT tech_blogs/_doc/1
{"title":"Introducing big data......", "tags":"hadoop,elasticsearch,spark", "content":"You konw, for big data","views":0}
POST tech_blogs/_update/1
{"script":{"params":{"new_views":100},"source":"ctx._source.views += params.new_views"}}
# 查看 views 计数
POST tech_blogs/_search
# 保存脚本在 Cluster State
POST _scripts/update_views
{"script":{"lang":"painless","source":"ctx._source.views += params.new_views"}}
GET tech_blogs/_search
{"script_fields":{"rnd_views":{"script":{"lang":"painless","source":"""java.util.Random rnd = new Random(); doc['views'].value+rnd.nextInt(1000);"""}}},"query":{"match_all":{}}}
  • 脚本缓存:脚本编译的开销较大,Elasticsearch会将脚本编译后缓存在Cache 中

    • Inline scripts和 Stored Scripts都会被缓存
    • 默认缓存100个脚本
  • script.cache.max_size 设置最大缓存数

  • script.cache.expire 设置缓存超时

  • script.max_compilations_rate 默认5分钟最多75次编译 (75/5m)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java经典框架之MyBatis
  • 分享购买率拉满的8个商品详情页设计技巧!
  • 太阳能光伏电池板图像数据集
  • 2024 波卡黑客松大赛新加坡站晋级名单揭晓!共同见证潜力新星的巅峰之战
  • PCB过孔规则排列,还是随机?
  • 【网络安全】IIS未授权访问敏感数据
  • PHP7 的内核结构
  • Word文档被锁定无法编辑怎么办?一键快速移除Word编辑限制
  • 最新版 Java 线程池的设计与使用|万字笔记
  • 【EffectiveJava】chapter01对象创建与销毁
  • 虚拟机网络配置大纲
  • E31.【C语言】练习:指针运算习题集(上)
  • 深入RAG优化:BGE词嵌入全解析与Landmark Embedding新突破
  • C#线程同步
  • 大众(奥迪)汽车继电器编号对照表
  • 【技术性】Search知识
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • HTTP中的ETag在移动客户端的应用
  • Java编程基础24——递归练习
  • Vue2 SSR 的优化之旅
  • Webpack 4x 之路 ( 四 )
  • win10下安装mysql5.7
  • 工作手记之html2canvas使用概述
  • 基于游标的分页接口实现
  • 那些年我们用过的显示性能指标
  • 使用putty远程连接linux
  • 算法系列——算法入门之递归分而治之思想的实现
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 字符串匹配基础上
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 如何在招聘中考核.NET架构师
  • 数据库巡检项
  • ​香农与信息论三大定律
  • (HAL库版)freeRTOS移植STMF103
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (生成器)yield与(迭代器)generator
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 物件導向與老子思想 (OO)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 中创建支持集合初始化器的类型
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .Net语言中的StringBuilder:入门到精通
  • .Net中的设计模式——Factory Method模式
  • /3GB和/USERVA开关
  • @Slf4j idea标红Cannot resolve symbol ‘log‘
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429