elasticsearch 使用enrich processor填充数据

news/2024/12/16 21:45:44/

文章目录

      • 使用 POST 请求手动插入用户数据
      • 1. 创建 Enrich Policy
        • 步骤 1.1: 创建 Enrich Policy
        • 步骤 1.2: 执行 Enrich Policy
      • 2. 创建 Ingest Pipeline
        • 步骤 2.1: 创建 Ingest Pipeline
        • 步骤 2.2: 配置 Enrich Processor 参数
      • 3. 使用 Ingest Pipeline
        • 步骤 3.1: 使用 Pipeline 进行文档索引
        • 步骤 3.2: 查询和查看结果
      • 4. 更新 Enrich Policy(如果需要)
        • 步骤 4.1: 更新 Enrich Policy
        • 步骤 4.2: 重新执行 Enrich Policy
      • 5. 清理 Enrich Policy(如果不再使用)
      • 总结

在 Elasticsearch 中使用 enrich 处理器的流程包括几个主要步骤。首先,您需要定义一个 enrich policy,然后将该策略应用到 Ingest Pipeline 中,最后在数据索引过程中使用该管道来实现数据的丰富操作。下面是一个详细的流程步骤。

使用 POST 请求手动插入用户数据

POST /users/_doc/1
{"user_id": "1234","user_name": "John Doe","email": "johndoe@example.com","age": 30,"address": "123 Elm Street"
}

1. 创建 Enrich Policy

enrich policy 定义了如何从某个源索引中提取数据,并根据特定字段将其与目标文档进行匹配。这是使用 enrich 处理器的基础。

步骤 1.1: 创建 Enrich Policy

假设我们有一个 users 索引,存储了用户的详细信息(如 user_iduser_nameemail 等),并且我们想将这些信息基于 user_id 字段丰富到其他索引中的文档。

PUT _enrich/policy/user_enrich_policy
{"match": {"indices": ["users"],  // 数据来源索引"match_field": "user_id",  // 用于匹配的字段"enrich_fields": ["user_name", "email", "age"]  // 要从源索引中获取的字段}
}

在这里:

  • indices: 源数据所在的索引(这里是 users 索引)。
  • match_field: 用于匹配的字段(这里是 user_id 字段)。
  • enrich_fields: 要从源索引中获取并丰富目标文档的字段(比如 user_nameemailage 等)。
步骤 1.2: 执行 Enrich Policy

创建了 enrich policy 后,你需要执行它,这样 Elasticsearch 就会根据 match 查询从源索引中提取数据。

POST _enrich/policy/user_enrich_policy/_execute

执行此请求后,Elasticsearch 将根据政策从 users 索引中提取数据并创建一个内存中的匹配索引。

注意:Enrich Policy 是一个异步操作,创建并执行之后,它会定期更新和同步相关的数据。

2. 创建 Ingest Pipeline

enrich 处理器是通过 Ingest Pipeline 来使用的。在这个管道中,你可以配置 enrich 处理器,它会在文档被索引时将 enrich 数据合并到目标文档中。

步骤 2.1: 创建 Ingest Pipeline

你可以创建一个使用 enrich 处理器的 Ingest Pipeline。该管道会基于文档中的 user_id 字段从 user_enrich_policy 中查找并合并信息。

PUT _ingest/pipeline/user_enrich_pipeline
{"description": "Enrich user data from users index","processors": [{"enrich": {"policy_name": "user_enrich_policy",  // 使用的 enrich policy 名称"field": "user_id",  // 用于匹配的字段名"target_field": "user_info"  // 合并到目标文档的字段名}}]
}

在这里:

  • policy_name: 指定我们创建的 user_enrich_policy
  • field: 目标文档中用来匹配的字段(在这里是 user_id)。
  • target_field: 合并后的数据将被存储在目标文档中的字段(比如 user_info)。
步骤 2.2: 配置 Enrich Processor 参数

enrich 处理器中,你还可以使用以下几个可选参数:

  • ignore_missing: 是否忽略缺失的匹配项。默认为 false,即当没有找到匹配时,会抛出错误。如果设置为 true,则会忽略没有匹配的情况,目标字段将保持为空。
  • max_matches: 如果有多个匹配项,限制合并数据的数量。默认为 1。

3. 使用 Ingest Pipeline

enrich 处理器和管道准备好后,你可以在索引文档时使用它。

步骤 3.1: 使用 Pipeline 进行文档索引

当你将文档索引到 Elasticsearch 时,可以指定要使用的 ingest pipeline,在该管道中,enrich 处理器会根据 user_id 字段从 users 索引获取并合并相关数据。

POST /my_index/_doc/1?pipeline=user_enrich_pipeline
{"user_id": "1234"  // 当前文档中包含 user_id,enrich 处理器会根据此字段进行匹配
}
步骤 3.2: 查询和查看结果

一旦文档被成功索引,你可以查询目标文档并查看 user_info 字段,里面会包含 users 索引中对应 user_id 的信息。

GET /my_index/_doc/1

假设 user_id1234,那么返回的文档可能如下:

{"_id": "1","_source": {"user_id": "1234","user_info": {"user_name": "John Doe","email": "johndoe@example.com","age": 30}}
}

在这里,user_info 字段包含了来自 users 索引的用户数据(如 user_nameemailage)。

4. 更新 Enrich Policy(如果需要)

如果你需要更新 enrich policy,可以进行相应的调整,比如添加或删除字段,修改匹配规则等。然后,重新执行 enrich policy

步骤 4.1: 更新 Enrich Policy
PUT _enrich/policy/user_enrich_policy
{"match": {"indices": ["users"],"match_field": "user_id","enrich_fields": ["user_name", "email", "age", "address"]  // 新增加了 address 字段}
}
步骤 4.2: 重新执行 Enrich Policy
POST _enrich/policy/user_enrich_policy/_execute

更新后,新的 user_info 字段将包括新的数据(例如 address)。

5. 清理 Enrich Policy(如果不再使用)

当不再需要某个 enrich policy 时,可以删除它:

DELETE _enrich/policy/user_enrich_policy

这会删除 enrich policy 和关联的匹配数据。


总结

使用 enrich 处理器的完整流程包括以下几个步骤:

  1. 创建 Enrich Policy:定义从源索引中提取数据的规则。
  2. 执行 Enrich Policy:执行政策并创建匹配数据。
  3. 创建 Ingest Pipeline:在管道中使用 enrich 处理器,将匹配的数据合并到目标文档中。
  4. 使用 Pipeline 索引数据:使用指定的管道进行文档索引。
  5. 查询数据:查询文档,查看合并后的数据。
  6. 更新和清理:根据需求更新或删除 enrich policy。

通过 enrich 处理器,您可以在索引文档时将来自其他索引的相关数据动态合并,从而减少实时查询的复杂度和延迟。


http://www.ppmy.cn/news/1555684.html

相关文章

若依微服务中配置 MySQL + DM 多数据源

文章目录 1、导入 MySQL 和达梦(DM)依赖2、在 application-druid.yml 中配置达梦(DM)数据源3、在 DruidConfig 类中配置多数据源信息4、在 Service 层或方法级别切换数据源4.1 在 Service 类上切换到从库数据源4.2 在方法级别切换…

前端Vue中使用Guacamole进行远程桌面的前端部分

最近公司有个项目要求远程虚拟机,最后选择使用了Guacamole进行实现,网上搜了一下感觉资料不是很多,对guacamole-common.js里的API介绍也没查到(捂脸),可能是我的问题。网上的教程都是教后端怎么搭建远程桌面…

Spring Boot集成ShedLock实现分布式定时任务

1、什么是ShedLock? ShedLock 是一个 Java 库,通常用于分布式系统中,确保定时任务(Scheduled Tasks)在集群环境下只被某一个实例执行一次。它通过在共享资源(例如数据库或分布式缓存)中添加锁的…

人工智能大语言模型起源篇,低秩微调(LoRA)

上一篇: 《规模法则(Scaling Law)与参数效率的提高》 序言:您在找工作时会不会经常听到LoRA微调,这项技术的来源就是这里了。 (12)Hu、Shen、Wallis、Allen-Zhu、Li、L Wang、S Wang 和 Chen 于2021年发表…

Matlab笔记---clear、clc、clear all应用

在MATLAB中,clear、clc 和 clear all 是三个常用的命令,它们各自有不同的作用: clc: clc 命令用于清除MATLAB命令窗口中的所有输出。它不会删除任何变量、函数或文件,只是清除屏幕上的显示内容,让你可以更…

并行口的基本概念

单片机的并行口结构包括多个并行I/O端口,用于与外部设备进行并行数据传输。这些端口能够直接读写外部存储器、显示设备、打印机等外设的数据,是单片机与外界交互的重要通道。在深入探讨之前,我们先简要了解下单片机的基本概念。 单片机&…

Next.js 指令教程:深入理解 use-server 指令

更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 概述 2. use-server 指令概述 2.1 什么是 use-server 指令? 2.2 为什么需要 use-server? 3. use-server 工作原理 3.1 渲染过程 3.2 动态…

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(19):密钥

为了避免暴力破解,不同密码学算法的密钥应该保证一定长度,密钥长度足够长也不代表安全,密钥应该是随机、无法预测的。 从两个维度考虑: ◎对称加密算法、MAC算法使用的密钥就是一串数字。 ◎公开密钥算法中的密钥是一对&#x…