创建或更新查询规则集
编辑创建或更新查询规则集
编辑创建或更新查询规则集。
请求
编辑PUT _query_rules/<规则集_id>
请求主体
编辑-
rules
- (必需,对象数组)此查询规则集中包含的特定规则。
每个规则集最多包含 100 条规则。可以使用 xpack.applications.rules.max_rules_per_ruleset
集群设置将其增加到 1000 条。
每个规则必须包含以下信息
-
rule_id
(必需,字符串)此规则的唯一标识符。 -
type
(必需,字符串)规则的类型。目前只允许pinned
和exclude
查询规则类型。 -
criteria
(必需,对象数组)应用该规则必须满足的条件。如果为一个规则指定了多个条件,则必须满足所有条件才能应用该规则。 -
actions
(必需,对象)匹配规则时要执行的操作。此操作的格式取决于规则类型。
条件必须包含以下信息
-
type
(必需,字符串)条件的类型。支持以下条件类型-
exact
只有完全匹配才符合规则定义的条件。适用于字符串或数值。 -
fuzzy
完全匹配或在允许的 莱文斯坦编辑距离 内的匹配符合规则定义的条件。仅适用于字符串值。 -
prefix
以此值开头的匹配符合规则定义的条件。仅适用于字符串值。 -
suffix
以此值结尾的匹配符合规则定义的条件。仅适用于字符串值。 -
contains
字段中任何位置包含此值的匹配符合规则定义的条件。仅适用于字符串值。 -
lt
值小于此值的匹配符合规则定义的条件。仅适用于数值。 -
lte
值小于或等于此值的匹配符合规则定义的条件。仅适用于数值。 -
gt
值大于此值的匹配符合规则定义的条件。仅适用于数值。 -
gte
值大于或等于此值的匹配符合规则定义的条件。仅适用于数值。 -
always
匹配所有查询,无论输入如何。
-
-
metadata
(可选,字符串)要匹配的元数据字段。此元数据将用于匹配 规则 中发送的match_criteria
。除always
外,所有条件类型都必需。 -
values
(可选,字符串数组)要与元数据字段匹配的值。只需匹配一个值即可满足条件。除always
外,所有条件类型都必需。
操作取决于规则类型。允许对 pinned
或 exclude
规则执行以下操作
由于 固定查询 中的限制,您只能使用 ids
或 docs
来选择文档,但不能在单个规则中同时使用两者。建议在查询规则集中使用其中一种,以避免错误。此外,固定查询最多只能固定 100 个命中。如果多个匹配规则固定了超过 100 个文档,则只会按照它们在规则集中指定的顺序固定前 100 个文档。
示例
编辑以下示例创建一个名为 my-ruleset
的新查询规则集。
有两个规则与 my-ruleset
关联
-
当
user_query
包含pugs
或puggles
并且user_country
完全匹配us
时,my-rule1
将固定 ID 为id1
和id2
的文档。 -
当
query_string
模糊匹配rescue dogs
时,my-rule2
将排除来自不同指定索引且 ID 为id3
和id4
的文档。
resp = client.query_rules.put_ruleset( ruleset_id="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" } ] } } ], ) print(resp)
const response = await client.transport.request({ method: "PUT", path: "/_query_rules/my-ruleset", body: { 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", }, ], }, }, ], }, }); console.log(response);
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" } ] } } ] }