数据丰富

编辑

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

English

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

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

1

English

默认情况下,策略中定义的每个富化字段都会作为列添加。要显式选择添加的富化字段,请使用 WITH <field1>, <field2>, ...

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

1

English

您可以使用 WITH new_name=<field1> 重命名添加的列

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

1

English

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

更新富化索引

编辑

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

更新富化策略

编辑

创建后,您无法更新或更改富化策略。相反,您可以:

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

限制

编辑

ES|QL ENRICH 命令仅支持类型为 match 的富化策略。此外,ENRICH 仅支持丰富类型为 keyword 的列。