クエリルールによる検索
クエリルールは、指定された基準メタデータに一致するクエリの検索結果をカスタマイズすることを可能にします。これにより、結果に対する制御が強化され、たとえば、定義された基準に一致するプロモートされたドキュメントが結果リストの最上部に返されることが保証されます。メタデータはクエリルールで定義され、クエリ基準に対して一致します。クエリルールは、クエリに一致させるためにメタデータを使用します。メタデータは、ルールクエリの一部としてオブジェクトとして提供され、クエリを区別するのに役立つものであれば何でもかまいません。たとえば:
- ユーザーが入力したクエリ文字列
- ユーザーに関するパーソナライズされたメタデータ(例:国、言語など)
- 特定のトピック
- リファリングサイト
- その他
クエリルールは、ルールクエリで提供されたメタデータをルールで指定された基準と一致させるために使用されるメタデータキーを定義します。
クエリルールが、定義された基準に従ってルールクエリメタデータに一致すると、クエリルールアクションが基盤となるorganic
クエリに適用されます。
たとえば、クエリルールは、ユーザーが入力したクエリ文字列pugs
と国us
に一致し、ルールクエリが両方の基準を満たす場合に、養子に出せるシェルタードッグをプロモートするように定義できます。
ルールは、クエリルールAPIを使用して定義され、ルールクエリを使用して検索されます。
ルール定義
ルールを定義する際は、以下の点を考慮してください:
ルールタイプ
適用したいルールのタイプ。現時点では、単一のルールタイプがあります:
pinned
は、クエリをピン留めされたクエリに書き換え、クエリルールに一致する指定された結果を返された結果セットの最上部にピン留めします。
ルール基準
このルールが一致する基準。基準はtype
、metadata
、およびvalues
として定義されます。許可される基準タイプは:
タイプ | 一致要件 |
---|---|
exact |
ルールメタデータが指定された値と正確に一致します。 |
fuzzy |
ルールメタデータが指定された値と許可されたレーベンシュタイン編集距離内で一致します。 |
prefix |
ルールメタデータが指定された値で始まります。 |
suffix |
ルールメタデータが指定された値で終わります。 |
contains |
ルールメタデータが指定された値を含みます。 |
lt |
ルールメタデータが指定された値より小さいです。 |
lte |
ルールメタデータが指定された値以下です。 |
gt |
ルールメタデータが指定された値より大きいです。 |
gte |
ルールメタデータが指定された値以上です。 |
always |
すべてのルールクエリに対して常に一致します。 |
ルールアクション
ルールがクエリに一致したときに取るアクション:
ids
は、指定された_id
をピン留めします。docs
は、指定されたインデックス内の指定されたドキュメントをピン留めします。
単一のインデックスを検索する場合はids
を使用し、複数のインデックスを検索する場合はdocs
を使用します。ids
とdocs
は同じクエリで組み合わせることはできません。詳細についてはピン留めされたクエリを参照してください。
クエリルールの追加
クエリルールは、クエリルールセットの作成または更新呼び出しを使用して追加できます。これにより、指定された基準に一致するクエリに適用される1つ以上のクエリルールを含むルールセットが追加されます。
次のコマンドは、2つのピン留めされたドキュメントルールを持つmy-ruleset
というクエリルールセットを作成します:
- 最初のルールは、ピン留めされたクエリを生成し、
query_string
メタデータ値がpuggles
またはpugs
のいずれかにファジー一致し、ユーザーの位置が米国にある場合に、_id
のid1
とid2
をピン留めします。 2番目のルールは、
_id
のid3
をmy-index-000001
インデックスから、id4
をmy-index-000002
インデックスから特にピン留めするピン留めされたクエリを生成します。query_string
メタデータ値がbeagles
を含む場合です。
コンソール
PUT /_query_rules/my-ruleset
{
"rules": [
{
"rule_id": "rule1",
"type": "pinned",
"criteria": [
{
"type": "fuzzy",
"metadata": "query_string",
"values": [ "puggles", "pugs" ]
},
{
"type": "exact",
"metadata": "user_country",
"values": [ "us" ]
}
],
"actions": {
"ids": [
"id1",
"id2"
]
}
},
{
"rule_id": "rule2",
"type": "pinned",
"criteria": [
{
"type": "contains",
"metadata": "query_string",
"values": [ "beagles" ]
}
],
"actions": {
"docs": [
{
"_index": "my-index-000001",
"_id": "id3"
},
{
"_index": "my-index-000002",
"_id": "id4"
}
]
}
}
]
}
APIレスポンスは、これは新しいルールセットか編集されたルールセットかに応じて、created
またはupdated
の結果を返します。
ルールセットごとに100ルールの制限があります。これは、xpack.applications.rules.max_rules_per_ruleset
クラスタ設定を使用して最大1000まで増やすことができます。
コンソール-結果
{
"result": "created"
}
クエリルールセットの取得呼び出しを使用して、作成したばかりのルールセットを取得し、クエリルールセットのリスト呼び出しを使用してすべてのクエリルールセットの概要を取得し、クエリルールセットの削除呼び出しを使用してクエリルールセットを削除できます。
ルールクエリの実行
1つ以上のクエリルールセットを定義したら、ルールクエリを使用してこれらのルールセットを検索できます。ルールセットは順番に評価されるため、指定した最初のルールセットのルールが、以降のルールセットの前に適用されます。
上記で定義されたmy-ruleset
の例のクエリは:
Python
resp = client.search(
index="my-index-000001",
query={
"rule": {
"organic": {
"query_string": {
"query": "puggles"
}
},
"match_criteria": {
"query_string": "puggles",
"user_country": "us"
},
"ruleset_ids": [
"my-ruleset"
]
}
},
)
print(resp)
Js
const response = await client.search({
index: "my-index-000001",
query: {
rule: {
organic: {
query_string: {
query: "puggles",
},
},
match_criteria: {
query_string: "puggles",
user_country: "us",
},
ruleset_ids: ["my-ruleset"],
},
},
});
console.log(response);
コンソール
GET /my-index-000001/_search
{
"query": {
"rule": {
"organic": {
"query_string": {
"query": "puggles"
}
},
"match_criteria": {
"query_string": "puggles",
"user_country": "us"
},
"ruleset_ids": ["my-ruleset"]
}
}
}
このルールクエリは、定義されたクエリルールセットのrule1
に対して一致し、有機的なクエリをid1
およびid2
をトップヒットとしてピン留めされたクエリに変換します。有機的なクエリからの他の一致は、ピン留めされた結果の下に返されます。
ルールセット内の複数のルールが単一のルールクエリに一致することが可能です。この場合、ピン留めされたドキュメントは次の順序で返されます:
- ルールセット内で一致するルールが出現する場所
- 単一のルールで複数のドキュメントが指定されている場合、それらが指定された順序で