クエリルールの作成または更新

クエリルールセット内の個々のクエリルールを作成または更新します。

リクエスト

PUT _query_rules/<ruleset_id>/_rule/<rule_id>

前提条件

manage_search_query_rules 権限が必要です。

(必須、オブジェクト) クエリルールのためのパラメータを含みます:

リクエストボディ

  • type
  • (必須、文字列) ルールのタイプ。この時点では、pinned クエリルールタイプのみが許可されています。
  • criteria
  • (必須、オブジェクトの配列) ルールが適用されるために満たす必要がある基準。ルールに対して複数の基準が指定されている場合、すべての基準を満たす必要があります。

基準には以下の情報が必要です:

  • type (必須、文字列) 基準のタイプ。以下の基準タイプがサポートされています:
    • exact 正確な一致のみがルールで定義された基準を満たします。文字列または数値に適用可能です。
    • fuzzy 正確な一致または許可された レーベンシュタイン編集距離 内の一致がルールで定義された基準を満たします。文字列値にのみ適用可能です。
    • prefix この値で始まる一致がルールで定義された基準を満たします。文字列値にのみ適用可能です。
    • suffix この値で終わる一致がルールで定義された基準を満たします。文字列値にのみ適用可能です。
    • contains フィールド内のどこかにこの値を含む一致がルールで定義された基準を満たします。文字列値にのみ適用可能です。
    • lt この値より小さい値を持つ一致がルールで定義された基準を満たします。数値値にのみ適用可能です。
    • lte この値以下の値を持つ一致がルールで定義された基準を満たします。数値値にのみ適用可能です。
    • gt この値より大きい値を持つ一致がルールで定義された基準を満たします。数値値にのみ適用可能です。
    • gte この値以上の値を持つ一致がルールで定義された基準を満たします。数値値にのみ適用可能です。
    • always 入力に関係なくすべてのクエリに一致します。
  • metadata (オプション、文字列) 一致させるメタデータフィールド。このメタデータは、ルール で送信された match_criteria に対して一致させるために使用されます。always 以外のすべての基準タイプに必要です。
  • values (オプション、文字列の配列) メタデータフィールドに対して一致させる値。基準を満たすためには、少なくとも1つの値が一致する必要があります。always 以外のすべての基準タイプに必要です。
    • actions
    • (必須、オブジェクト) ルールが一致したときに実行するアクション。アクションの形式はルールタイプによって異なります。

アクションはルールタイプに依存します。pinned ルールの場合、アクションは ピン留めされたクエリ で指定された形式に従います。以下のアクションが許可されています:

  • ids (オプション、文字列の配列) ピン留めするドキュメントの一意の ドキュメントIDids または docs のいずれか1つのみを指定でき、少なくとも1つは指定する必要があります。
  • docs (オプション、オブジェクトの配列) ピン留めするドキュメント。ids または docs のいずれか1つのみを指定でき、少なくとも1つは指定する必要があります。各ドキュメントに対して以下の属性を指定できます:
    • _index (必須、文字列) ピン留めするドキュメントのインデックス。
    • _id (必須、文字列) 一意の ドキュメントID

ピン留めされたクエリ の制限により、ids または docs を使用してドキュメントをピン留めすることしかできず、単一のルールで両方を使用することはできません。エラーを避けるために、クエリルールセットではどちらか一方を使用することをお勧めします。さらに、ピン留めされたクエリには最大100のピン留めされたヒットの制限があります。複数の一致するルールが100を超えるドキュメントをピン留めする場合、最初の100ドキュメントのみがルールセットで指定された順序でピン留めされます。

以下の例は、my-ruleset というクエリルールセット内にID my-rule1 の新しいクエリルールを作成します。

my-rule1 は、user_querypugs または puggles かつ user_countryus に正確に一致する場合、ID id1id2 のドキュメントをピン留めします。

Python

  1. resp = client.query_rules.put_rule(
  2. ruleset_id="my-ruleset",
  3. rule_id="my-rule1",
  4. type="pinned",
  5. criteria=[
  6. {
  7. "type": "contains",
  8. "metadata": "user_query",
  9. "values": [
  10. "pugs",
  11. "puggles"
  12. ]
  13. },
  14. {
  15. "type": "exact",
  16. "metadata": "user_country",
  17. "values": [
  18. "us"
  19. ]
  20. }
  21. ],
  22. actions={
  23. "ids": [
  24. "id1",
  25. "id2"
  26. ]
  27. },
  28. )
  29. print(resp)

Js

  1. const response = await client.transport.request({
  2. method: "PUT",
  3. path: "/_query_rules/my-ruleset/_rule/my-rule1",
  4. body: {
  5. type: "pinned",
  6. criteria: [
  7. {
  8. type: "contains",
  9. metadata: "user_query",
  10. values: ["pugs", "puggles"],
  11. },
  12. {
  13. type: "exact",
  14. metadata: "user_country",
  15. values: ["us"],
  16. },
  17. ],
  18. actions: {
  19. ids: ["id1", "id2"],
  20. },
  21. },
  22. });
  23. console.log(response);

コンソール

  1. PUT _query_rules/my-ruleset/_rule/my-rule1
  2. {
  3. "type": "pinned",
  4. "criteria": [
  5. {
  6. "type": "contains",
  7. "metadata": "user_query",
  8. "values": [ "pugs", "puggles" ]
  9. },
  10. {
  11. "type": "exact",
  12. "metadata": "user_country",
  13. "values": [ "us" ]
  14. }
  15. ],
  16. "actions": {
  17. "ids": [
  18. "id1",
  19. "id2"
  20. ]
  21. }
  22. }