查询规则API
edit查询规则API
edit查询规则允许您配置每个查询的规则,这些规则在查询时应用于匹配特定规则的查询。 查询规则被组织成规则集,这些规则集是与传入查询匹配的查询规则的集合。 查询规则通过使用规则查询来应用。
如果一个查询匹配了规则集中的一个或多个规则,查询将在搜索前被重写以应用这些规则。 这允许仅为匹配特定术语的查询固定文档。
使用以下API来管理查询规则集:
创建或更新查询规则集
edit创建或更新查询规则集。
请求
editPUT _query_rules/
请求体
edit-
rules
- (必需,对象数组) 此查询规则集包含的具体规则。
每个规则集的规则数量限制为100条。
可以通过设置xpack.applications.rules.max_rules_per_ruleset
集群参数将其增加到最多1000条。
每条规则必须包含以下信息:
-
rule_id
(必需,字符串)此规则的唯一标识符。 -
type
(必需,字符串)规则的类型。 目前仅允许pinned
和exclude
查询规则类型。 -
criteria
(必需,对象数组)必须满足的条件,以便应用该规则。 如果为规则指定了多个条件,则必须满足所有条件才能应用该规则。 -
actions
(必需,对象)匹配规则时要采取的操作。 此操作的格式取决于规则类型。
标准必须包含以下信息:
-
type
(必需,字符串)标准的类型。 支持以下标准类型:-
exact
只有完全匹配符合规则定义的标准。 适用于字符串或数值。 -
fuzzy
完全匹配或匹配在允许的Levenshtein编辑距离内符合规则定义的标准。 仅适用于字符串值。 -
prefix
以该值开头的匹配符合规则定义的标准。 仅适用于字符串值。 -
suffix
以该值结尾的匹配符合规则定义的标准。 仅适用于字符串值。 -
contains
在字段中任何位置包含该值的匹配符合规则定义的标准。 仅适用于字符串值。 -
lt
值小于该值的匹配符合规则定义的标准。 仅适用于数值。 -
lte
值小于或等于该值的匹配符合规则定义的标准。 仅适用于数值。 -
gt
值大于该值的匹配符合规则定义的标准。 仅适用于数值。 -
gte
值大于或等于该值的匹配符合规则定义的标准。 仅适用于数值。 -
always
匹配所有查询,无论输入如何。
-
-
metadata
(可选,字符串)要匹配的元数据字段。 此元数据将用于与match_criteria
进行匹配,该match_criteria
在Rule中发送。 除always
外,所有标准类型都需要此项。 -
values
(可选,字符串数组)要与元数据字段匹配的值。 只需一个值匹配即可满足标准。 除always
外,所有标准类型都需要此项。
操作取决于规则类型。
以下操作适用于固定
或排除
规则:
由于固定查询的限制,您只能使用ids
或docs
选择文档,但不能在单个规则中同时使用两者。
建议在查询规则集中使用其中之一,以避免错误。
此外,固定查询的最大限制为100个固定命中。
如果多个匹配规则固定了超过100个文档,则只会按规则集中指定的顺序固定前100个文档。
示例
edit以下示例创建了一个名为 my-ruleset
的新查询规则集。
与my-ruleset
相关的两条规则:
-
my-rule1
将在user_query
包含pugs
或puggles
并且user_country
完全匹配us
时,固定ID为id1
和id2
的文档。 -
my-rule2
将在query_string
模糊匹配rescue dogs
时,排除来自不同指定索引且ID为id3
和id4
的文档。
PUT _query_rules/my-ruleset { "rules": [ { "rule_id": "my-rule1", "type": "pinned", "criteria": [ { "type": "contains", "metadata": "user_query", "values": [ "pugs", "puggles" ] }, { "type": "exact", "metadata": "user_country", "values": [ "us" ] } ], "actions": { "ids": [ "id1", "id2" ] } }, { "rule_id": "my-rule2", "type": "exclude", "criteria": [ { "type": "fuzzy", "metadata": "user_query", "values": [ "rescue dogs" ] } ], "actions": { "docs": [ { "_index": "index1", "_id": "id3" }, { "_index": "index2", "_id": "id4" } ] } } ] }
获取查询规则集
edit检索有关查询规则集的信息。
请求
editGET _query_rules/
先决条件
edit需要 manage_search_query_rules
权限。
路径参数
edit-
<ruleset_id>
- (必需,字符串)
响应代码
edit-
400
-
未提供
ruleset_id
。 -
404
(Missing resources) -
未找到与
ruleset_id
匹配的查询规则集。
示例
edit以下示例获取名为 my-ruleset
的查询规则集:
GET _query_rules/my-ruleset/
一个示例响应:
{ "ruleset_id": "my-ruleset", "rules": [ { "rule_id": "my-rule1", "type": "pinned", "criteria": [ { "type": "contains", "metadata": "query_string", "values": [ "pugs", "puggles" ] } ], "actions": { "ids": [ "id1", "id2" ] } }, { "rule_id": "my-rule2", "type": "pinned", "criteria": [ { "type": "fuzzy", "metadata": "query_string", "values": [ "rescue dogs" ] } ], "actions": { "docs": [ { "_index": "index1", "_id": "id3" }, { "_index": "index2", "_id": "id4" } ] } } ] }
列出查询规则集
edit返回有关所有存储的查询规则集的信息。将返回每个规则集的规则数量的摘要信息,并且可以使用获取查询规则集命令返回完整详细信息。
请求
editGET _query_rules/
先决条件
edit需要 manage_search_query_rules
权限。
路径参数
edit-
size
- (可选,整数) 要检索的最大结果数。
-
from
- (可选,整数) 从第一个结果开始的偏移量。
示例
edit以下示例列出了所有已配置的查询规则集:
GET _query_rules/
以下示例列出了前三个查询规则集:
GET _query_rules/?from=0&size=3
一个示例响应:
{ "count": 3, "results": [ { "ruleset_id": "ruleset-1", "rule_total_count": 1, "rule_criteria_types_counts": { "exact": 1 } }, { "ruleset_id": "ruleset-2", "rule_total_count": 2, "rule_criteria_types_counts": { "exact": 1, "fuzzy": 1 } }, { "ruleset_id": "ruleset-3", "rule_total_count": 3, "rule_criteria_types_counts": { "exact": 1, "fuzzy": 2 } } ] }
在 rule_criteria_types_counts
中的计数可能大于 rule_total_count
的值,因为一个规则可能包含多个条件。
删除查询规则集
edit删除查询规则集及其关联数据。 这是一个不可恢复的破坏性操作。
请求
editDELETE _query_rules/
前提条件
edit需要 manage_search_query_rules
权限。
路径参数
edit-
<ruleset_id>
- (必需,字符串)
响应代码
edit-
400
-
未提供
ruleset_id
。 -
404
(Missing resources) -
未找到与
ruleset_id
匹配的查询规则集。
创建或更新查询规则
edit创建或更新查询规则集中的单个查询规则。
请求
editPUT _query_rules/
请求体
edit-
type
-
(必需,字符串) 规则的类型。 目前允许以下查询规则类型:
-
pinned
将识别并固定特定文档到搜索结果的顶部。 -
exclude
将从搜索结果中排除特定文档。
-
-
criteria
- (必需,对象数组) 必须满足的条件,规则才会被应用。 如果为规则指定了多个条件,则必须满足所有条件,规则才会被应用。
标准必须包含以下信息:
-
type
(必需,字符串)标准的类型。 支持以下标准类型:-
exact
只有精确匹配符合规则定义的标准。 适用于字符串或数值。 -
fuzzy
精确匹配或匹配在允许的Levenshtein编辑距离内符合规则定义的标准。 仅适用于字符串值。 -
prefix
以该值开头的匹配符合规则定义的标准。 仅适用于字符串值。 -
suffix
以该值结尾的匹配符合规则定义的标准。 仅适用于字符串值。 -
contains
在字段中任何位置包含该值的匹配符合规则定义的标准。 仅适用于字符串值。 -
lt
值小于该值的匹配符合规则定义的标准。 仅适用于数值。 -
lte
值小于或等于该值的匹配符合规则定义的标准。 仅适用于数值。 -
gt
值大于该值的匹配符合规则定义的标准。 仅适用于数值。 -
gte
值大于或等于该值的匹配符合规则定义的标准。 仅适用于数值。 -
always
匹配所有查询,无论输入如何。
-
-
metadata
(可选,字符串)要匹配的元数据字段。 此元数据将用于与Rule中发送的match_criteria
进行匹配。 除了always
之外,所有条件类型都需要此项。 -
values
(可选,字符串数组)要与元数据字段匹配的值。 只需一个值匹配即可满足条件。 除了always
之外,所有条件类型都需要此项。-
actions
- (必需,对象)规则匹配时要采取的操作。 此操作的格式取决于规则类型。
-
操作取决于规则类型。
以下操作适用于固定
或排除
规则:
由于固定查询的限制,您只能使用ids
或docs
来固定文档,但不能在单个规则中同时使用两者。
建议在查询规则集中使用其中之一,以避免错误。
此外,固定查询的最大限制为100个固定命中。
如果多个匹配规则固定了超过100个文档,则只会按规则集中指定的顺序固定前100个文档。
示例
edit以下示例在一个名为 my-ruleset
的查询规则集中创建了一个 ID 为 my-rule1
的新查询规则。
-
my-rule1
将在user_query
包含pugs
或puggles
并且user_country
完全匹配us
时,选择带有 IDid1
和id2
的文档进行提升。
PUT _query_rules/my-ruleset/_rule/my-rule1 { "type": "pinned", "criteria": [ { "type": "contains", "metadata": "user_query", "values": [ "pugs", "puggles" ] }, { "type": "exact", "metadata": "user_country", "values": [ "us" ] } ], "actions": { "ids": [ "id1", "id2" ] } }
获取查询规则
edit检索查询规则集内单个查询规则的信息。
请求
editGET _query_rules/
先决条件
edit需要 manage_search_query_rules
权限。
路径参数
edit-
<ruleset_id>
- (必需,字符串)
-
<rule_id>
- (必需,字符串)
响应代码
edit-
400
-
缺少
ruleset_id
或rule_id
,或两者都缺少。 -
404
(Missing resources) -
要么找不到匹配
ruleset_id
的查询规则集,要么在该规则集中找不到匹配rule_id
的规则。
示例
edit以下示例从名为 my-ruleset
的规则集中获取 ID 为 my-rule1
的查询规则:
GET _query_rules/my-ruleset/_rule/my-rule1
一个示例响应:
{ "rule_id": "my-rule1", "type": "pinned", "criteria": [ { "type": "contains", "metadata": "query_string", "values": [ "pugs", "puggles" ] } ], "actions": { "ids": [ "id1", "id2" ] } }
删除查询规则
edit删除现有查询规则集中的单个查询规则。 这是一个破坏性操作,只能通过创建或更新查询规则 API重新添加相同的规则来恢复。
请求
editDELETE _query_rules/
前提条件
edit需要 manage_search_query_rules
权限。
路径参数
edit-
<ruleset_id>
- (必需,字符串)
-
<rule_id>
- (必需,字符串)
响应代码
edit-
400
-
缺少
ruleset_id
、rule_id
或两者。 -
404
(Missing resources) -
未找到与
ruleset_id
匹配的查询规则集,或者在该规则集中未找到与rule_id
匹配的规则。
示例
edit以下示例从名为 my-ruleset
的查询规则集中删除 ID 为 my-rule1
的查询规则:
DELETE _query_rules/my-ruleset/_rule/my-rule1
测试查询规则集
edit评估匹配标准与查询规则集,以识别符合该标准的规则。
此功能处于技术预览阶段,可能会在未来的版本中进行更改或移除。Elastic 将努力修复任何问题,但技术预览版中的功能不受官方 GA 功能支持 SLA 的约束。
请求
editPOST _query_rules/
先决条件
edit需要 manage_search_query_rules
权限。
路径参数
edit-
<ruleset_id>
- (必需,字符串)
请求体
edit-
match_criteria
-
(必需,对象) 定义应用于给定查询规则集中规则的匹配条件。
匹配条件应与规则中
criteria.metadata
字段定义的键匹配。
响应代码
edit-
400
-
未提供
ruleset_id
或match_criteria
。 -
404
(Missing resources) -
未找到与
ruleset_id
匹配的查询规则集。
示例
edit要测试规则集,请提供您想要测试的匹配条件:
POST _query_rules/my-ruleset/_test { "match_criteria": { "query_string": "puggles" } }
一个示例响应:
{ "total_matched_rules": 1, "matched_rules": [ { "ruleset_id": "my-ruleset", "rule_id": "my-rule1" } ] }