データの強化

ES|QL ENRICH 処理コマンドは、クエリ時に、Elasticsearch の強化インデックスに見つかったフィールド値の組み合わせと、1つ以上のソースインデックスからのデータを組み合わせます。

たとえば、ENRICH を使用して次のことができます:

  • 知っている IP アドレスに基づいて Web サービスやベンダーを特定する
  • 商品 ID に基づいて小売注文に商品情報を追加する
  • メールアドレスに基づいて連絡先情報を補足する

ENRICH コマンドの動作

ENRICH コマンドは、Elasticsearch インデックスからのデータを使用してテーブルに新しい列を追加します。いくつかの特別なコンポーネントが必要です:

esql enrich

  • 強化ポリシー
  • 入力テーブルに適切な強化データを追加するために使用される設定オプションのセット。
    強化ポリシーには次のものが含まれます:

    • 強化データをドキュメントとして保存する1つ以上のソースインデックスのリスト
    • プロセッサが強化データを受信ドキュメントに一致させる方法を決定するポリシータイプ
    • 受信ドキュメントに一致させるために使用されるソースインデックスからの一致フィールド
    • 受信ドキュメントに追加したいソースインデックスからの強化データを含む強化フィールド
      ポリシーを作成した後、使用する前に実行する必要があります。強化ポリシーを実行すると、ポリシーのソースインデックスからのデータを使用して、強化インデックスと呼ばれるストリームライン化されたシステムインデックスが作成されます。ENRICH コマンドは、このインデックスを使用して入力テーブルを一致させて強化します。

  • ソースインデックス
  • ENRICH コマンドが入力テーブルに追加できる強化データを保存するインデックス。これらのインデックスは、通常の Elasticsearch インデックスと同様に作成および管理できます。強化ポリシーでは複数のソースインデックスを使用できます。また、同じソースインデックスを複数の強化ポリシーで使用することもできます。

  • 強化インデックス
  • 特定の強化ポリシーに関連付けられた特別なシステムインデックス。
    入力テーブルの行をソースインデックスのドキュメントに直接一致させることは遅く、リソースを多く消費する可能性があります。これを加速するために、ENRICH コマンドは強化インデックスを使用します。
    強化インデックスにはソースインデックスからの強化データが含まれていますが、ストリームライン化を助けるためのいくつかの特別なプロパティがあります:
    • システムインデックスであり、Elasticsearch によって内部的に管理され、強化プロセッサおよび ES|QL ENRICH コマンドでの使用のみを目的としています。
    • 常に .enrich-* で始まります。
    • 読み取り専用であり、直接変更することはできません。
    • 高速取得のために強制マージされています

強化ポリシーの設定

ENRICH を使用し始めるには、次の手順に従います:

強化ポリシーが設定されると、強化データを更新し、強化ポリシーを更新できます。

ENRICH コマンドは、いくつかの操作を実行し、クエリの速度に影響を与える可能性があります。

前提条件

強化ポリシーを使用するには、次のものが必要です:

  • 使用される任意のインデックスに対する read インデックス権限
  • enrich_user 組み込みロール

強化データの追加

まず、1つ以上のソースインデックスにドキュメントを追加します。これらのドキュメントには、最終的に受信データに追加したい強化データが含まれている必要があります。

ソースインデックスは、ドキュメントおよびインデックス API を使用して、通常の Elasticsearch インデックスと同様に管理できます。

また、FilebeatなどのBeatsを設定して、ドキュメントを自動的にソースインデックスに送信およびインデックス化することもできます。Beats の使い方を参照してください。

強化ポリシーの作成

ソースインデックスに強化データを追加した後、強化ポリシー作成 APIまたはKibana のインデックス管理を使用して強化ポリシーを作成します。

作成後、強化ポリシーを更新または変更することはできません。強化ポリシーの更新を参照してください。

強化ポリシーの実行

強化ポリシーが作成されたら、強化ポリシー実行 APIまたはKibana のインデックス管理を使用して強化インデックスを作成するために実行する必要があります。

esql enrich policy

強化インデックスには、ポリシーのソースインデックスからのドキュメントが含まれています。強化インデックスは常に .enrich-* で始まり、読み取り専用であり、強制マージされています

強化インデックスは、強化プロセッサまたはES|QL ENRICH コマンドによってのみ使用されるべきです。他の目的で強化インデックスを使用することは避けてください。

強化ポリシーの使用

ポリシーが実行された後、ENRICH コマンドを使用してデータを強化できます。

esql enrich command

次の例では、languages_policy 強化ポリシーを使用して、ポリシーで定義された各強化フィールドの新しい列を追加します。一致は、強化ポリシーで定義された match_field を使用して行われ、入力テーブルに同じ名前の列が必要です(この例では language_code)。ENRICH は、一致フィールド値に基づいて強化インデックス内のレコードを探します。

Esql

  1. ROW language_code = "1"
  2. | ENRICH languages_policy
language_code:keyword language_name:keyword
1 英語

異なる名前の列を一致フィールドとして使用するには、ON <column-name> を使用します:

Esql

  1. ROW a = "1"
  2. | ENRICH languages_policy ON a
a:keyword language_name:keyword
1 英語

デフォルトでは、ポリシーで定義された各強化フィールドが列として追加されます。追加される強化フィールドを明示的に選択するには、WITH <field1>, <field2>, ... を使用します:

Esql

  1. ROW a = "1"
  2. | ENRICH languages_policy ON a WITH language_name
a:keyword language_name:keyword
1 英語

WITH new_name=<field1> を使用して追加される列の名前を変更できます:

Esql

  1. ROW a = "1"
  2. | 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 タイプの列での強化のみをサポートします。