【Elasticsearch】 Ingest Pipeline `processors`属性详解

在Elasticsearch中,Ingest Pipeline 的 `processors` 属性是一个数组,包含一个或多个处理器(processors)。每个处理器定义了一个数据处理步骤,可以在数据索引之前对数据进行预处理或富化。以下是对 `processors` 属性中常见处理器的详细说明:

 

 

### 常见处理器

 

1. **`set`**:

   - **描述**: 设置或更新文档中的字段值。

   - **参数**:

     - `field`: 要设置的字段名称。

     - `value`: 要设置的值。

     - `if` (可选): 条件表达式,只有当条件为真时才执行处理器。

   - **示例**:

     ```json

     {

       "set": {

         "field": "status",

         "value": "processed"

       }

     }

     ```

 

2. **`remove`**:

   - **描述**: 删除文档中的字段。

   - **参数**:

     - `field`: 要删除的字段名称。

     - `if` (可选): 条件表达式,只有当条件为真时才执行处理器。

   - **示例**:

     ```json

     {

       "remove": {

         "field": "temp_field"

       }

     }

     ```

 

3. **`rename`**:

   - **描述**: 重命名文档中的字段。

   - **参数**:

     - `field`: 当前字段名称。

     - `target_field`: 新字段名称。

     - `ignore_missing` (可选): 如果为 `true`,则在字段不存在时不抛出错误。

   - **示例**:

     ```json

     {

       "rename": {

         "field": "old_field",

         "target_field": "new_field"

       }

     }

     ```

 

4. **`script`**:

   - **描述**: 使用Painless脚本对文档进行处理。

   - **参数**:

     - `source`: Painless脚本代码。

     - `lang` (可选): 脚本语言,默认为 `painless`。

     - `params` (可选): 脚本参数。

   - **示例**:

     ```json

     {

       "script": {

         "source": "ctx._source.count++",

         "params": {

           "increment": 1

         }

       }

     }

     ```

 

5. **`inference`**:

   - **描述**: 使用预训练的机器学习模型对文档进行推理。

   - **参数**:

     - `model_id`: 预训练模型的ID。

     - `target_field`: 存储推理结果的字段名称。

     - `inference_config` (可选): 推理配置。

   - **示例**:

     ```json

     {

       "inference": {

         "model_id": "my_word_embedding_model",

         "target_field": "embedding",

         "inference_config": {

           "natural_language_inference": {

             "results_field": "embedding"

           }

         }

       }

     }

     ```

 

6. **`query_vector_builder`**:

   - **描述**: 生成查询向量。

   - **参数**:

     - `field`: 输入字段名称。

     - `target_field`: 存储生成的查询向量的字段名称。

   - **示例**:

     ```json

     {

       "query_vector_builder": {

         "field": "text",

         "target_field": "query_vector"

       }

     }

     ```

 

7. **`date`**:

   - **描述**: 将字符串转换为日期。

   - **参数**:

     - `field`: 要转换的字段名称。

     - `target_field` (可选): 存储转换后的日期的字段名称。

     - `formats`: 日期格式列表。

   - **示例**:

     ```json

     {

       "date": {

         "field": "timestamp",

         "target_field": "date",

         "formats": ["yyyy-MM-dd'T'HH:mm:ssZ", "epoch_millis"]

       }

     }

     ```

 

8. **`grok`**:

   - **描述**: 使用Grok模式解析文本字段。

   - **参数**:

     - `field`: 要解析的字段名称。

     - `patterns`: Grok模式列表。

     - `target_field` (可选): 存储解析结果的字段名称。

   - **示例**:

     ```json

     {

       "grok": {

         "field": "log_message",

         "patterns": ["%{COMBINEDAPACHELOG}"]

       }

     }

     ```

 

9. **`append`**:

   - **描述**: 将值追加到数组字段中。

   - **参数**:

     - `field`: 要追加值的字段名称。

     - `value`: 要追加的值。

   - **示例**:

     ```json

     {

       "append": {

         "field": "tags",

         "value": "new_tag"

       }

     }

     ```

 

10. **`convert`**:

    - **描述**: 将字段值转换为指定的数据类型。

    - **参数**:

      - `field`: 要转换的字段名称。

      - `target_field` (可选): 存储转换后值的字段名称。

      - `type`: 目标数据类型(如 `string`, `integer`, `float`, `boolean`)。

    - **示例**:

      ```json

      {

        "convert": {

          "field": "age",

          "type": "integer"

        }

      }

      ```

 

### 示例 Ingest Pipeline

 

以下是一个示例 Ingest Pipeline,展示了如何使用多个处理器:

 

```json

PUT _ingest/pipeline/example_pipeline

{

  "description": "Example pipeline with multiple processors",

  "processors": [

    {

      "set": {

        "field": "status",

        "value": "processed"

      }

    },

    {

      "remove": {

        "field": "temp_field"

      }

    },

    {

      "rename": {

        "field": "old_field",

        "target_field": "new_field"

      }

    },

    {

      "script": {

        "source": "ctx._source.count++"

      }

    },

    {

      "inference": {

      "model_id": "my_word_embedding_model",

      "target_field": "embedding"

    }

    },

    {

      "query_vector_builder": {

        "field": "text",

        "target_field": "query_vector"

      }

    },

    {

      "date": {

        "field": "timestamp",

        "target_field": "date",

        "formats": ["yyyy-MM-dd'T'HH:mm:ssZ", "epoch_millis"]

      }

    },

    {

      "grok": {

        "field": "log_message",

        "patterns": ["%{COMBINEDAPACHELOG}"]

      }

    },

    {

      "append": {

        "field": "tags",

        "value": "new_tag"

      }

    },

    {

      "convert": {

        "field": "age",

        "type": "integer"

      }

    }

  ]

}

```

 

### 使用 Ingest Pipeline

 

在索引数据时,指定使用创建的 Ingest Pipeline:

 

```json

POST my_index/_doc?pipeline=example_pipeline

{

  "text": "example text",

  "old_field": "some value",

  "temp_field": "temporary value",

  "timestamp": "2023-10-01T12:34:56Z",

  "log_message": "127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326",

  "age": "25"

}

```

 

### 验证结果

 

你可以通过查询索引来验证数据是否正确处理:

 

```json

GET my_index/_search

{

  "query": {

 

 

 

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

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

相关文章

Web3与传统互联网的对比:去中心化的未来路径

随着互联网技术的不断发展,Web3作为去中心化的新兴架构,正在逐步改变我们的网络体验。从传统的Web2到Web3,互联网的演进不仅是技术的革新,更是理念的变革。那么,Web3与传统互联网相比,到底有何不同&#xf…

三相电变为家庭220V,市电火线和零线关系,为什么用三相电输送

参考: https://www.zhihu.com/question/30555841/answer/85723024 上面是电力系统的主要组成,发电站发电后升压传输,然后到各大城市再降压使用。 我们看到电塔上都是三根线,那么因为整个过程都是三相电。 为什么用三相电&#xff…

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式 1.1、概念 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、 regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母&#xff0…

linux网络 | 传输层TCP | 认识tcp报头字段与分离

前言: 本节内容继续传输层的讲解, 本节讲解的是tcp协议。 tcp协议是我们日常中最常用的协议。就比如我们浏览网页,我们知道网页时http或者https协议。 其实http或者https底层就是用的tcp协议。tcp协议,全名又称为传输控制协议&…

Mysql触发器(学习自用)

一、介绍 二、触发器语法 注意:拿取新的数据时用new,旧数据用old。

ubuntu20使用apt安装mysql8

目录 ubuntu20使用apt安装mysql8报错列表参考链接首先删除旧mysql 一、下载配置mysql8库索引下载apt包解压包配置更新apt库索引 二、下载安装mysql8三、启动mysql服务配置开机自启动,忽略 本地登录远程登录查看mysql的所有用户使用客户端远程登陆如果报错完成 参考链…

昇腾AI产品

一.AI计算的基础知识 1.并行计算 指同时使用多种计算资源解决技术问题的过程,是提高计算机系统计算速度和数据处理能力的一种有效手段。它的基本思想是用多个处理器来共同求解同一个问题,即将被求解的问题分解成若干个部分,各部分均由一个独…

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…

学习Hibernate的调优方案

Hibernate是一个非常流行的Java ORM(对象关系映射)框架,它可以帮助开发者更轻松地处理数据库操作。然而,如果不进行适当的性能调优,Hibernate可能会导致应用程序运行缓慢。本文将详细探讨Hibernate的调优方案&#xff…

总结 uniapp 上不适配iphone的:new Date 时间、border线条、渐变

1、border样式缺了一边 这是错误样式: 需要添加: border: 1rpx solid #57c7bb; transform: rotateZ(0deg);//加入此代码解决iphone 不适配问题2、时间出现NaN 原因是因为ios中使用new Date 的时候出了问题 解决方案: 1.调整时间格式:将时间格式从"yyyy-MM-d…

内网渗透测试工具及渗透测试安全审计方法总结

1. 内网安全检查/渗透介绍 1.1 攻击思路 有2种思路: 攻击外网服务器,获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板,攻击内网其他服务器,最后获得敏感数据,并将数据传递到攻击者&#xff0…

Dockerfile另一种使用普通用户启动的方式

基础镜像的Dockerfile # 使用 Debian 11.9 的最小化版本作为基础镜像 FROM debian:11.11# 维护者信息 LABEL maintainer"caibingsen" # 复制自定义的 sources.list 文件(如果有的话) COPY sources.list /etc/apt/sources.list # 创建…

力扣707题——设计链表

#题目 从零开始设计链表,我们拆分成两次任务,今天先看1 ,2 ,4 #代码

leetcode刷题记录(七十二)——146. LRU 缓存

(一)问题描述 146. LRU 缓存 - 力扣(LeetCode)146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类: * LRUCache(int capacity)…

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…

vue2使用flv.js在浏览器打开flv格式视频

组件地址&#xff1a;GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…

Spring 中的事件驱动模型

事件驱动的基本了解 事件模式也就是观察者模式&#xff0c;当一个对象改变的时候&#xff0c;所有依赖的对象都会收到一个通知。 Subject&#xff1a;抽象主题 Observer&#xff1a;具体主题 Concrete Subject&#xff1a;抽象观察者&#xff0c;在得到更新通知之后去更新自…

STM32补充——IAP

0 前置知识&#xff1a; FLASH相关内容&#xff1a;前往STM32补充——FLASH STM32三种烧录方式&#xff08;看看就行&#xff09;&#xff1a; 1.ISP&#xff1a;In System Programming&#xff08;在系统编程&#xff09; 执行芯片厂商的 Bootloader 程序进入 ISP 模式&…

k8s的CICD实施项目

环境需求&#xff1a; 目前领导需要做一个需求&#xff0c;临时把我从运维岗位&#xff0c;把我调度到到专家组让我主导cicd的项目实施 目前环境资源 k8s环境&#xff0c;28台服务器&#xff0c;上面是k8s集群&#xff0c;要实施一个测试环境的cicd以及一个生产环境的cicd gitl…

【线性代数】基础版本的高斯消元法

[精确算法] 高斯消元法求线性方程组 线性方程组 考虑线性方程组&#xff0c; 已知 A ∈ R n , n , b ∈ R n A\in \mathbb{R}^{n,n},b\in \mathbb{R}^n A∈Rn,n,b∈Rn&#xff0c; 求未知 x ∈ R n x\in \mathbb{R}^n x∈Rn A 1 , 1 x 1 A 1 , 2 x 2 ⋯ A 1 , n x n b 1…