クエリルールによる検索

クエリルールは、指定された基準メタデータに一致するクエリの検索結果をカスタマイズすることを可能にします。これにより、結果に対する制御が強化され、たとえば、定義された基準に一致するプロモートされたドキュメントが結果リストの最上部に返されることが保証されます。メタデータはクエリルールで定義され、クエリ基準に対して一致します。クエリルールは、クエリに一致させるためにメタデータを使用します。メタデータは、ルールクエリの一部としてオブジェクトとして提供され、クエリを区別するのに役立つものであれば何でもかまいません。たとえば:

  • ユーザーが入力したクエリ文字列
  • ユーザーに関するパーソナライズされたメタデータ(例:国、言語など)
  • 特定のトピック
  • リファリングサイト
  • その他

クエリルールは、ルールクエリで提供されたメタデータをルールで指定された基準と一致させるために使用されるメタデータキーを定義します。

クエリルールが、定義された基準に従ってルールクエリメタデータに一致すると、クエリルールアクションが基盤となるorganicクエリに適用されます。

たとえば、クエリルールは、ユーザーが入力したクエリ文字列pugsと国usに一致し、ルールクエリが両方の基準を満たす場合に、養子に出せるシェルタードッグをプロモートするように定義できます。

ルールは、クエリルールAPIを使用して定義され、ルールクエリを使用して検索されます。

ルール定義

ルールを定義する際は、以下の点を考慮してください:

ルールタイプ

適用したいルールのタイプ。現時点では、単一のルールタイプがあります:

  • pinnedは、クエリをピン留めされたクエリに書き換え、クエリルールに一致する指定された結果を返された結果セットの最上部にピン留めします。

ルール基準

このルールが一致する基準。基準はtypemetadata、およびvaluesとして定義されます。許可される基準タイプは:

タイプ 一致要件
exact ルールメタデータが指定された値と正確に一致します。
fuzzy ルールメタデータが指定された値と許可されたレーベンシュタイン編集距離内で一致します。
prefix ルールメタデータが指定された値で始まります。
suffix ルールメタデータが指定された値で終わります。
contains ルールメタデータが指定された値を含みます。
lt ルールメタデータが指定された値より小さいです。
lte ルールメタデータが指定された値以下です。
gt ルールメタデータが指定された値より大きいです。
gte ルールメタデータが指定された値以上です。
always すべてのルールクエリに対して常に一致します。

ルールアクション

ルールがクエリに一致したときに取るアクション:

  • idsは、指定された_idをピン留めします。
  • docsは、指定されたインデックス内の指定されたドキュメントをピン留めします。

単一のインデックスを検索する場合はidsを使用し、複数のインデックスを検索する場合はdocsを使用します。idsdocsは同じクエリで組み合わせることはできません。詳細についてはピン留めされたクエリを参照してください。

クエリルールの追加

クエリルールは、クエリルールセットの作成または更新呼び出しを使用して追加できます。これにより、指定された基準に一致するクエリに適用される1つ以上のクエリルールを含むルールセットが追加されます。

次のコマンドは、2つのピン留めされたドキュメントルールを持つmy-rulesetというクエリルールセットを作成します:

  • 最初のルールは、ピン留めされたクエリを生成し、query_stringメタデータ値がpugglesまたはpugsのいずれかにファジー一致し、ユーザーの位置が米国にある場合に、_idid1id2をピン留めします。
  • 2番目のルールは、_idid3my-index-000001インデックスから、id4my-index-000002インデックスから特にピン留めするピン留めされたクエリを生成します。query_stringメタデータ値がbeaglesを含む場合です。

コンソール

  1. PUT /_query_rules/my-ruleset
  2. {
  3. "rules": [
  4. {
  5. "rule_id": "rule1",
  6. "type": "pinned",
  7. "criteria": [
  8. {
  9. "type": "fuzzy",
  10. "metadata": "query_string",
  11. "values": [ "puggles", "pugs" ]
  12. },
  13. {
  14. "type": "exact",
  15. "metadata": "user_country",
  16. "values": [ "us" ]
  17. }
  18. ],
  19. "actions": {
  20. "ids": [
  21. "id1",
  22. "id2"
  23. ]
  24. }
  25. },
  26. {
  27. "rule_id": "rule2",
  28. "type": "pinned",
  29. "criteria": [
  30. {
  31. "type": "contains",
  32. "metadata": "query_string",
  33. "values": [ "beagles" ]
  34. }
  35. ],
  36. "actions": {
  37. "docs": [
  38. {
  39. "_index": "my-index-000001",
  40. "_id": "id3"
  41. },
  42. {
  43. "_index": "my-index-000002",
  44. "_id": "id4"
  45. }
  46. ]
  47. }
  48. }
  49. ]
  50. }

APIレスポンスは、これは新しいルールセットか編集されたルールセットかに応じて、createdまたはupdatedの結果を返します。

ルールセットごとに100ルールの制限があります。これは、xpack.applications.rules.max_rules_per_rulesetクラスタ設定を使用して最大1000まで増やすことができます。

コンソール-結果

  1. {
  2. "result": "created"
  3. }

クエリルールセットの取得呼び出しを使用して、作成したばかりのルールセットを取得し、クエリルールセットのリスト呼び出しを使用してすべてのクエリルールセットの概要を取得し、クエリルールセットの削除呼び出しを使用してクエリルールセットを削除できます。

ルールクエリの実行

1つ以上のクエリルールセットを定義したら、ルールクエリを使用してこれらのルールセットを検索できます。ルールセットは順番に評価されるため、指定した最初のルールセットのルールが、以降のルールセットの前に適用されます。

上記で定義されたmy-rulesetの例のクエリは:

Python

  1. resp = client.search(
  2. index="my-index-000001",
  3. query={
  4. "rule": {
  5. "organic": {
  6. "query_string": {
  7. "query": "puggles"
  8. }
  9. },
  10. "match_criteria": {
  11. "query_string": "puggles",
  12. "user_country": "us"
  13. },
  14. "ruleset_ids": [
  15. "my-ruleset"
  16. ]
  17. }
  18. },
  19. )
  20. print(resp)

Js

  1. const response = await client.search({
  2. index: "my-index-000001",
  3. query: {
  4. rule: {
  5. organic: {
  6. query_string: {
  7. query: "puggles",
  8. },
  9. },
  10. match_criteria: {
  11. query_string: "puggles",
  12. user_country: "us",
  13. },
  14. ruleset_ids: ["my-ruleset"],
  15. },
  16. },
  17. });
  18. console.log(response);

コンソール

  1. GET /my-index-000001/_search
  2. {
  3. "query": {
  4. "rule": {
  5. "organic": {
  6. "query_string": {
  7. "query": "puggles"
  8. }
  9. },
  10. "match_criteria": {
  11. "query_string": "puggles",
  12. "user_country": "us"
  13. },
  14. "ruleset_ids": ["my-ruleset"]
  15. }
  16. }
  17. }

このルールクエリは、定義されたクエリルールセットのrule1に対して一致し、有機的なクエリをid1およびid2をトップヒットとしてピン留めされたクエリに変換します。有機的なクエリからの他の一致は、ピン留めされた結果の下に返されます。

ルールセット内の複数のルールが単一のルールクエリに一致することが可能です。この場合、ピン留めされたドキュメントは次の順序で返されます:

  • ルールセット内で一致するルールが出現する場所
  • 単一のルールで複数のドキュメントが指定されている場合、それらが指定された順序で