【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…

【094】基于51单片机全自动洗衣机【Proteus仿真+Keil程序+报告+原理图】

☆、设计硬件组成:51单片机最小系统LCD1602液晶显示FC103三档水位传感器AT24C02存储芯片进水泵排水泵L9110电机驱动芯片直流电机蜂鸣器LED灯按键设置。 1、设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片; 2、采用LCD1602液晶显示屏实时显示…

每日一题--比较版本号

文章目录 题目描述比较规则9种情况分析解释示例 解题思路实现步骤代码实现复杂版本简化版本 代码讲解复杂度分析 题目描述 在许多软件开发和版本管理系统中,版本号用于表示不同的更新或发布。通常版本号由多个修订号组成,这些修订号通过 . 连接。现在给…

Effective C++读书笔记——item23(用非成员,非友元函数取代成员函数)

一、主要观点: 在某些情况下,使用 non-member、non-friend 函数来替换 member 函数可以增强封装性和可扩展性,提供更好的软件设计。 二、详细解释: 封装性: 类成员函数的封装性考量:成员函数可以访问类的…

GBase8c aes_encrypt和aes_decrypt函数

在数据库中,aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别: 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb,…

重新理解tech lead角色

角色: tech leadleaderdeveloperarchitectleader:balance priorities,communicate clear goals,make apt decisions(做出适当的决定);supervise team members(管理团队成员),delegate tasks, issue feedback, evaluate risks, and resolve co…

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

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

Java 和 JavaScript 的区别

尽管名字相似,JavaScript 的名字中带有 “Java”,确实让很多人误以为它与 Java 有紧密联系。但实际上,它们是完全不同的语言,只是在 JavaScript 的发展历史中与 Java 有一定的关联。 1. JavaScript 的诞生背景 时间点&#xff1…

linux数据压缩

在Linux系统中,有多种工具可用于文件的压缩和解压缩。虽然compress是一个早期Unix系统中的文件压缩工具,但在现代Linux系统中,更推荐使用如gzip、bzip2、xz等效率更高的工具。以下是基于您提供的信息整理的关于Linux文件压缩工具及其使用方法…

outlook附件限制最大5m如何解决

Outlook 附件大小限制为 5MB,通常由邮件服务器(如 Exchange、Office 365、Gmail 等)或本地 Outlook 配置决定。可以采取以下几种方法来解决该限制问题: 解决方案 1:调整服务器端限制(管理员权限&#xff09…

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

Unity编辑拓展显示自定义类型

配合自定义特性或着header可以添加注解 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Reflection; using System; using Unity.VisualScripting;#if UNITY_EDITORpublic class EditorRender {public sta…

微前端qiankun的部署

微前端qiankun的部署 本地开发主应用配置启动端口子应用配置启动端口测试环境部署:场景 1:主应用和微应用部署到同一个服务器(同一个 IP 和端口)微应用都放在在一个特殊名称(不会和微应用重名)的文件夹下主应用配置子应用配置配置nginx本地开发 主应用配置启动端口 打开…

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…