Elasticsearch Ingest Pipeline `processors`属性详解

embedded/2025/1/22 7:20:33/

在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.ppmy.cn/embedded/155997.html

相关文章

Python基于Vue+Django网上商城的设计与实现【附源码】

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 我们每天都在与各种智能设备打交道,从手机到电脑,再到各种外设,它们已经…

SparkSQL函数综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建项目2.2 添加依赖2.3 设置源目录2.4 创建日志属性文件2.5 创建hive配置文件2.6 创建数据分析对象2.6.1 导入相关类2.6.2 创建获取Spark会话方法2.6.3 创建表方法2.6.4 准备数据文件2.6.5 创建加载数据方法2.6.6 创建薪水排行榜方法2.6.…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…

WebSocket知识点笔记(一)

WebSocket ​ WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务端之间的消息传递更加高效,允许服务器主动向客户端推送数据。 一.WebSocket全双工通信 WebSocket提供了真正的双向通信,客户端和服务端可以同时发送和接收消息 …

计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

被动扫描和主动扫描的区别

在网络安全和漏洞检测中,被动扫描和主动扫描是两种常见的技术,它们在工作方式和应用场景上有显著的区别。 被动扫描 被动扫描是一种在目标无法察觉的情况下进行的信息收集方法。它通过监听网络流量、代理等方式获取数据,而不主动与目标系统…

Python保留字与标识符及常变量

1、保留字 保留字;严格区分大小写 不可以把保留字作为变量、函数、类、模块和其他对象的名称来使用 import keyword print(keyword.kwlist) # 输出所有的保留字 print(len(keyword.kwlist)) # 获取保留字的个数 true 真 # True 真 #属于保留字,会…