数据扩充编辑

ES|QL ENRICH 处理命令在查询时将来自一个或多个源索引的数据与 Elasticsearch 扩充索引中找到的字段值组合相结合。

例如,您可以使用 ENRICH

  • 根据已知的 IP 地址识别 Web 服务或供应商
  • 根据产品 ID 将产品信息添加到零售订单中
  • 根据电子邮件地址补充联系信息

ENRICH 命令的工作原理编辑

ENRICH 命令使用 Elasticsearch 索引中的数据向表中添加新列。它需要一些特殊的组件

esql enrich
扩充策略

一组用于将正确的扩充数据添加到输入表的配置选项。

扩充策略包含

  • 一个或多个 *源索引* 的列表,这些索引将扩充数据存储为文档
  • *策略类型*,它确定处理器如何将扩充数据与传入文档匹配
  • 源索引中的 *匹配字段*,用于匹配传入文档
  • *扩充字段*,包含您要添加到传入文档中的源索引中的扩充数据

创建策略 之后,必须先 执行 它才能使用。执行扩充策略使用来自策略源索引的数据来创建一个简化的系统索引,称为 *扩充索引*。ENRICH 命令使用此索引来匹配和扩充输入表。

源索引
存储 ENRICH 命令可以添加到输入表中的扩充数据的索引。您可以像管理常规 Elasticsearch 索引一样创建和管理这些索引。您可以在一个扩充策略中使用多个源索引。您还可以在多个扩充策略中使用相同的源索引。
扩充索引

绑定到特定扩充策略的特殊系统索引。

将输入表中的行直接与源索引中的文档匹配可能会很慢且占用大量资源。为了加快速度,ENRICH 命令使用扩充索引。

扩充索引包含来自源索引的扩充数据,但具有一些特殊属性以帮助简化它们

  • 它们是系统索引,这意味着它们由 Elasticsearch 内部管理,并且仅供扩充处理器和 ES|QL ENRICH 命令使用。
  • 它们始终以 .enrich-* 开头。
  • 它们是只读的,这意味着您不能直接更改它们。
  • 它们已 强制合并 以便快速检索。

设置扩充策略编辑

要开始使用 ENRICH,请按照以下步骤操作

设置扩充策略后,您可以 更新扩充数据更新扩充策略

ENRICH 命令执行多项操作,可能会影响查询速度。

先决条件编辑

要使用扩充策略,您必须具有

  • 对使用的任何索引的 read 索引权限
  • enrich_user 内置角色

添加扩充数据编辑

首先,将文档添加到一个或多个源索引。这些文档应包含您最终要添加到传入数据中的扩充数据。

您可以使用 文档索引 API 像管理常规 Elasticsearch 索引一样管理源索引。

您还可以设置 Beats(例如 Filebeat)来自动将文档发送并索引到您的源索引。请参阅 Beats 入门

创建扩充策略编辑

将扩充数据添加到源索引后,使用 创建扩充策略 APIKibana 中的索引管理 来创建扩充策略。

创建后,您将无法更新或更改扩充策略。请参阅 更新扩充策略

执行扩充策略编辑

创建扩充策略后,您需要使用 执行扩充策略 APIKibana 中的索引管理 来执行它以创建 扩充索引

esql enrich policy

*扩充索引* 包含来自策略源索引的文档。扩充索引始终以 .enrich-* 开头,是只读的,并且已 强制合并

扩充索引应仅由 扩充处理器ES|QL ENRICH 命令 使用。避免将扩充索引用于其他目的。

使用扩充策略编辑

执行策略后,您可以使用 ENRICH 命令 来扩充您的数据。

esql enrich command

以下示例使用 languages_policy 扩充策略为策略中定义的每个扩充字段添加一个新列。匹配是使用 扩充策略 中定义的 match_field 执行的,并且要求输入表具有一列具有相同的名称(在本例中为 language_code)。ENRICH 将根据匹配字段值在 扩充索引 中查找记录。

ROW language_code = "1"
| ENRICH languages_policy
language_code:keyword language_name:keyword

1

英语

要使用与策略中定义的 match_field 不同的名称的列作为匹配字段,请使用 ON <列名>

ROW a = "1"
| ENRICH languages_policy ON a
a:keyword language_name:keyword

1

英语

默认情况下,策略中定义的每个扩充字段都添加为一列。要显式选择添加的扩充字段,请使用 WITH <字段 1>, <字段 2>, ...

ROW a = "1"
| ENRICH languages_policy ON a WITH language_name
a:keyword language_name:keyword

1

英语

您可以使用 WITH 新名称=<字段 1> 重命名添加的列

ROW a = "1"
| ENRICH languages_policy ON a WITH name = language_name
a:keyword name:keyword

1

英语

如果发生名称冲突,新创建的列将覆盖现有列。

更新扩充索引编辑

创建后,您无法更新或索引文档到扩充索引。而是更新您的源索引并再次 执行 扩充策略。这将从您更新的源索引创建一个新的扩充索引。先前的扩充索引将通过延迟维护作业删除。默认情况下,每 15 分钟执行一次。

更新扩充策略编辑

创建后,您将无法更新或更改扩充策略。相反,您可以

  1. 创建并 执行 新的扩充策略。
  2. 在任何正在使用的扩充处理器或 ES|QL 查询中,将先前的扩充策略替换为新的扩充策略。
  3. 使用 删除扩充策略 API 或 Kibana 中的索引管理 来删除先前的扩充策略。

限制编辑

ES|QL ENRICH 命令仅支持类型为 match 的扩充策略。此外,ENRICH 仅支持对 keyword 类型的列进行扩充。