ElasticSearch-Ingest Pipeline Painless Script

news2024/9/21 21:37:57
  • 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

坚持与等待的区别!看了当年高考状元如今的现状,我才明白所谓名校的真相——早读(逆天打工人爬取热门微信文章解读)

快 机会来了 引言Python 代码第一篇 洞见 看了当年高考状元如今的现状,我才明白所谓名校的真相第二篇 股市 之 空窗期结尾 (不是 你改名 怎么改群名字! 这下每个人都知道王妈妈单身了) 引言 昨天忘记写了 真的很抱歉 说下借口哈…

Invicti-Professional-V24.8.1

前言 Invicti 专业 Web 应用程序安全扫描器 自动、极其准确且易于使用的 Web 应用程序安全扫描程序,可自动查找网站、Web 应用程序和 Web 服务中的安全漏洞。 Invicti Professional Edition 是一款商业 Web 应用程序安全扫描器。它旨在自动查找和修复 Web 应用程…

VScode:快捷键和技巧

格式化文档 搜索文件名

助贷CRM系统:为金融中介行业打造全新营销管理模式

助贷CRM(客户关系管理)系统是针对金融中介行业,特别是从事贷款助贷业务的机构设计的一套综合管理系统。该系统旨在通过数字化、智能化的手段,优化金融中介机构的营销、销售、客户管理及服务流程,提升运营效率&#xff…

构建高效在线拍卖系统:SpringBoot实践

MySQL数据库 数据库是系统开发过程中不可或缺的一部分。 在WEB应用方面,MySQL AB开发了一个具有很大优势的MySQL关系数据库管理系统。 MySQL可以将数据存储在不同的表中,这非常灵活,并且还可以提高系统在实际应用中的速度。 数据库访问最常用…

创客匠人8月总结|所有赋能都是服务,都是为了帮客户拿结果

“九层之台,起于累土;千里之行,始于足下。”每一份伟大的成就都源自不懈的积累与坚定的步伐。 作为“知识变现整体解决方案服务商”,我们始终站在时代的前沿,致力于为每一位知识IP搭建桥梁,直通知识变现之…

软件工程造价师习题练习 24

1.关于功能点方法,以下描述不正确的是( ) A. 可用于项目范围管理 B. 可用于澄清需求 C. 反映软件功能规模的大小 D. 与软件开发成本高度相关 功能点方法是一种用于软件规模估算的方法,它主要用于衡量软件的功能规模大小。功能点分析不直接与软件开发…

杀毒软件火绒下载地址

杀毒软件火绒下载地址

【深度学习实战】使用深度学习模型可视化工具——Netron在线可视化深度学习神经网络

一直以来,对于深度学习领域的开发者,可视化模型都是非常迫切的需求,今天主要介绍一款可视化工具——Netron Netron有三种使用方式:在线、本地安装、pip安装 今天在这里只介绍在线使用这种方式。 Netron有个官方的网站&#xff1…

SOC 阵列:创新算力的未来之路

一、SOC阵列的概念与发展历程 SOC 阵列是由多个特定功能集成电路组合在一个芯片上的系统或产品,包含硬件系统及嵌入式软件。从传统集成电路到 SOC 经历多个阶段,初期电路由分立元件组成,后集成到单芯片集成电路中,其发展遵循摩尔…

『功能项目』协程生成怪物模型【25】

打开上一篇24AssetBundle上传加载u3d模型的项目, 本章要做的事情是在项目运行14秒后生成一个怪物鲸鱼,并且怪物鲸鱼会根据路径点自动巡航 在资源商店免费下载怪物模型 重命名为MonsterWhale 创建一个空物体 重命名为Path 在子级下创建小球Sphere作为巡…

STM32CubeIMX修改库文件代码相关问题

有时候会遇到需要需要修改库文件的需求,比如下面两种情况: 1、库文件有问题 2、库文件需要修改以适配当前需求 修改库文件的目的是,当下次生成程序的时候直接生成修改后的,无需在修改库文件。 直接将修改替换至默认文件&#xff…

软件安全测试有多重要?第三方软件测试公司如何进行安全测试?

在当今信息化迅速发展的社会,软件的安全性越来越受到重视。近年来,我国的网络安全形势日趋复杂,各类网络攻击层出不穷,软件泄露、数据丢失等事件屡见不鲜。为了保障软件项目的安全性,安全测试必不可少。 软件安全测试…

物流计算面单物流单标签打印软件 佳易王物流管理系统下载操作教程

一、前言 物流计算面单物流单标签打印软件 佳易王物流管理系统下载操作教程 1、佳易王物流管理系统软件分两个版本,一个是大众版,一个是高级版,本例以大众版为例说明 软件在打印物流单的同时可以打印标签 2、软件为免安装版,解…

使用matplotlab绘制多条形图

##黑马程序学习 这种多个条形图放在一起的图形该怎么画呢? 请看以下代码 #横着的条形图 from matplotlib import pyplot as plt import matplotlib#设置显示中文 和 负号 matplotlib.rcParams[font.sans-serif][SimHei] matplotlib.rcParams[axes.unicode_minus]F…

第二百一十四节 Java反射 - Java反射字段访问

Java反射 - Java反射字段访问 我们可以使用反射在两个步骤中获取或设置字段。 获取字段的引用。要读取字段的值,请在字段上调用getXxx()方法,其中Xxx是字段的数据类型。要设置字段的值,请调用相应的setXxx()方法。 以相同的方式访问静态和实…

CCF-CSP 2024 --重塑矩阵1,2c语言题解

创作想法是因为像我当初大一时候想参加一些比赛但是奈何只学了c和c相关数据结构,但是对于许多竞赛的题目的题解往往都是c或者其他面向对象的编程语言,让我们难以在c语言基础上入手这些比较复杂的题目。 创造的目的是为了帮助各位同时提高我对c语言编程的…

vue2-elementUI-初始化启动项目-git

前置基础 资料下载-阿里云盘 vueaxioselement-uinpmvscode 初始化项目 1.创建vue2工程 1.1 vue create projectName1.2 选择 1.3 初始化 vue-cli 的核心步骤: Manually select features (*) Babel ( ) TypeScript ( ) Progressive Web App (PWA) Support …

计算机毕业设计选题推荐-企业会议室管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Java企业电子招投标系统:Spring Cloud微服务架构-强化企业招采竞争力:电子化招投标平台助力效率与成本控制-支持二次开发

​在当今激烈的市场竞争环境下,企业规模的持续扩大使得招采管理变得日益重要,已成为企业提升核心竞争力的关键一环。为了实现更高效、更高质量的招采成果,我们设计了一套基于电子化平台的解决方案,旨在通过电子化招投标系统&#…