例: 正確な値に基づいてデータを強化する

match enrich policies は、メールアドレスやIDなどの正確な値に基づいて、受信文書に強化データを一致させます。これは term query を使用します。

次の例では、メールアドレスに基づいて受信文書にユーザー名と連絡先情報を追加する match 強化ポリシーを作成します。その後、受信パイプラインのプロセッサに match 強化ポリシーを追加します。

create index API または index API を使用して、ソースインデックスを作成します。

次のインデックスAPIリクエストは、ソースインデックスを作成し、そのインデックスに新しい文書をインデックスします。

Python

  1. resp = client.index(
  2. index="users",
  3. id="1",
  4. refresh="wait_for",
  5. document={
  6. "email": "[email protected]",
  7. "first_name": "Mardy",
  8. "last_name": "Brown",
  9. "city": "New Orleans",
  10. "county": "Orleans",
  11. "state": "LA",
  12. "zip": 70116,
  13. "web": "mardy.asciidocsmith.com"
  14. },
  15. )
  16. print(resp)

Ruby

  1. response = client.index(
  2. index: 'users',
  3. id: 1,
  4. refresh: 'wait_for',
  5. body: {
  6. email: '[email protected]',
  7. first_name: 'Mardy',
  8. last_name: 'Brown',
  9. city: 'New Orleans',
  10. county: 'Orleans',
  11. state: 'LA',
  12. zip: 70_116,
  13. web: 'mardy.asciidocsmith.com'
  14. }
  15. )
  16. puts response

Js

  1. const response = await client.index({
  2. index: "users",
  3. id: 1,
  4. refresh: "wait_for",
  5. document: {
  6. email: "[email protected]",
  7. first_name: "Mardy",
  8. last_name: "Brown",
  9. city: "New Orleans",
  10. county: "Orleans",
  11. state: "LA",
  12. zip: 70116,
  13. web: "mardy.asciidocsmith.com",
  14. },
  15. });
  16. console.log(response);

コンソール

  1. PUT /users/_doc/1?refresh=wait_for
  2. {
  3. "email": "[email protected]",
  4. "first_name": "Mardy",
  5. "last_name": "Brown",
  6. "city": "New Orleans",
  7. "county": "Orleans",
  8. "state": "LA",
  9. "zip": 70116,
  10. "web": "mardy.asciidocsmith.com"
  11. }

create enrich policy APIを使用して、matchポリシータイプの強化ポリシーを作成します。このポリシーには次のものが含まれている必要があります:

  • 1つ以上のソースインデックス
  • match_field、受信文書と一致させるために使用されるソースインデックスのフィールド
  • 受信文書に追加したいソースインデックスからの強化フィールド

Python

  1. resp = client.enrich.put_policy(
  2. name="users-policy",
  3. match={
  4. "indices": "users",
  5. "match_field": "email",
  6. "enrich_fields": [
  7. "first_name",
  8. "last_name",
  9. "city",
  10. "zip",
  11. "state"
  12. ]
  13. },
  14. )
  15. print(resp)

Ruby

  1. response = client.enrich.put_policy(
  2. name: 'users-policy',
  3. body: {
  4. match: {
  5. indices: 'users',
  6. match_field: 'email',
  7. enrich_fields: [
  8. 'first_name',
  9. 'last_name',
  10. 'city',
  11. 'zip',
  12. 'state'
  13. ]
  14. }
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.enrich.putPolicy({
  2. name: "users-policy",
  3. match: {
  4. indices: "users",
  5. match_field: "email",
  6. enrich_fields: ["first_name", "last_name", "city", "zip", "state"],
  7. },
  8. });
  9. console.log(response);

コンソール

  1. PUT /_enrich/policy/users-policy
  2. {
  3. "match": {
  4. "indices": "users",
  5. "match_field": "email",
  6. "enrich_fields": ["first_name", "last_name", "city", "zip", "state"]
  7. }
  8. }

execute enrich policy APIを使用して、ポリシーのための強化インデックスを作成します。

コンソール

  1. POST /_enrich/policy/users-policy/_execute?wait_for_completion=false

create or update pipeline APIを使用して、受信パイプラインを作成します。パイプライン内で、次のものを含むenrich processorを追加します:

  • あなたの強化ポリシー。
  • 受信文書のfield、強化インデックスからの文書と一致させるために使用されます。
  • 受信文書のために追加された強化データを保存するために使用されるtarget_field。このフィールドには、あなたの強化ポリシーで指定されたmatch_fieldenrich_fieldsが含まれています。

Python

  1. resp = client.ingest.put_pipeline(
  2. id="user_lookup",
  3. processors=[
  4. {
  5. "enrich": {
  6. "description": "Add 'user' data based on 'email'",
  7. "policy_name": "users-policy",
  8. "field": "email",
  9. "target_field": "user",
  10. "max_matches": "1"
  11. }
  12. }
  13. ],
  14. )
  15. print(resp)

Js

  1. const response = await client.ingest.putPipeline({
  2. id: "user_lookup",
  3. processors: [
  4. {
  5. enrich: {
  6. description: "Add 'user' data based on 'email'",
  7. policy_name: "users-policy",
  8. field: "email",
  9. target_field: "user",
  10. max_matches: "1",
  11. },
  12. },
  13. ],
  14. });
  15. console.log(response);

コンソール

  1. PUT /_ingest/pipeline/user_lookup
  2. {
  3. "processors" : [
  4. {
  5. "enrich" : {
  6. "description": "Add 'user' data based on 'email'",
  7. "policy_name": "users-policy",
  8. "field" : "email",
  9. "target_field": "user",
  10. "max_matches": "1"
  11. }
  12. }
  13. ]
  14. }

受信パイプラインを使用して文書をインデックスします。受信文書には、あなたの強化プロセッサで指定されたfieldが含まれている必要があります。

Python

  1. resp = client.index(
  2. index="my-index-000001",
  3. id="my_id",
  4. pipeline="user_lookup",
  5. document={
  6. "email": "[email protected]"
  7. },
  8. )
  9. print(resp)

Js

  1. const response = await client.index({
  2. index: "my-index-000001",
  3. id: "my_id",
  4. pipeline: "user_lookup",
  5. document: {
  6. email: "[email protected]",
  7. },
  8. });
  9. console.log(response);

コンソール

  1. PUT /my-index-000001/_doc/my_id?pipeline=user_lookup
  2. {
  3. "email": "[email protected]"
  4. }

強化プロセッサが適切なフィールドデータを一致させて追加したことを確認するには、get APIを使用してインデックスされた文書を表示します。

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="my_id",
  4. )
  5. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 'my_id'
  4. )
  5. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: "my_id",
  4. });
  5. console.log(response);

コンソール

  1. GET /my-index-000001/_doc/my_id

APIは次の応答を返します:

コンソール-結果

  1. {
  2. "found": true,
  3. "_index": "my-index-000001",
  4. "_id": "my_id",
  5. "_version": 1,
  6. "_seq_no": 55,
  7. "_primary_term": 1,
  8. "_source": {
  9. "user": {
  10. "email": "[email protected]",
  11. "first_name": "Mardy",
  12. "last_name": "Brown",
  13. "zip": 70116,
  14. "city": "New Orleans",
  15. "state": "LA"
  16. },
  17. "email": "[email protected]"
  18. }
  19. }