创建或更新查询规则集编辑

此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。

创建或更新查询规则集。

请求编辑

PUT _query_rules/<ruleset_id>

先决条件编辑

需要 manage_search_query_rules 权限。

(必需,对象) 包含查询规则集的参数

请求体编辑

rules
(必需,对象数组) 此查询规则集中包含的特定规则。

每个规则集最多可以包含 100 条规则。可以使用 xpack.applications.rules.max_rules_per_ruleset 集群设置将此限制提高到 1000。

每个规则必须包含以下信息

  • rule_id (必需,字符串) 此规则的唯一标识符。
  • type (必需,字符串) 规则类型。目前只允许 pinned 查询规则类型。
  • criteria (必需,对象数组) 规则要应用必须满足的条件。如果为规则指定了多个条件,则所有条件都必须满足才能应用规则。
  • actions (必需,对象) 规则匹配时要执行的操作。此操作的格式取决于规则类型。

条件必须包含以下信息

  • type (必需,字符串) 条件类型。支持以下条件类型

    • exact 只有完全匹配才能满足规则定义的条件。适用于字符串或数值。
    • fuzzy 完全匹配或在允许的 Levenshtein 编辑距离 内的匹配才能满足规则定义的条件。仅适用于字符串值。
    • prefix 以此值开头的匹配才能满足规则定义的条件。仅适用于字符串值。
    • suffix 以此值结尾的匹配才能满足规则定义的条件。仅适用于字符串值。
    • contains 在字段中任何位置包含此值的匹配才能满足规则定义的条件。仅适用于字符串值。
    • lt 值小于此值的匹配才能满足规则定义的条件。仅适用于数值。
    • lte 值小于或等于此值的匹配才能满足规则定义的条件。仅适用于数值。
    • gt 值大于此值的匹配才能满足规则定义的条件。仅适用于数值。
    • gte 值大于或等于此值的匹配才能满足规则定义的条件。仅适用于数值。
    • always 匹配所有查询,无论输入如何。
  • metadata (可选,字符串) 要匹配的元数据字段。此元数据将用于匹配 规则 中发送的 match_criteria。除 global 外,所有条件类型都需要此字段。
  • values (可选,字符串数组) 要匹配元数据字段的值。只有一个值必须匹配才能满足条件。除 global 外,所有条件类型都需要此字段。

操作取决于规则类型。对于 pinned 规则,操作遵循 固定查询 指定的格式。允许以下操作

  • ids (可选,字符串数组) 要固定的文档的唯一 文档 ID。只能指定 idsdocs 中的一个,并且必须至少指定一个。
  • docs (可选,对象数组) 要固定的文档。只能指定 idsdocs 中的一个,并且必须至少指定一个。您可以为每个文档指定以下属性

    • _index (必需,字符串) 要固定的文档的索引。
    • _id (必需,字符串) 唯一的 文档 ID

由于 固定查询 中的限制,您只能使用 idsdocs 固定文档,但不能在单个规则中同时使用两者。建议在查询规则集中使用其中一个,以避免错误。此外,固定查询的固定命中数上限为 100。如果多个匹配规则固定了超过 100 个文档,则只会在规则集中指定的顺序中固定前 100 个文档。

示例编辑

以下示例创建了一个名为 my-ruleset 的新查询规则集。

两个规则与 my-ruleset 相关联

  • my-rule1 将在 user_query 包含 pugs puggles 并且 user_country 完全匹配 us 时固定 ID 为 id1id2 的文档。
  • my-rule2 将在 query_string 模糊匹配 rescue dogs 时固定来自不同指定索引的 ID 为 id3id4 的文档。
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": "pinned",
            "criteria": [
                {
                    "type": "fuzzy",
                    "metadata": "user_query",
                    "values": [ "rescue dogs" ]
                }
            ],
            "actions": {
                "docs": [
                    {
                        "_index": "index1",
                        "_id": "id3"
                    },
                    {
                        "_index": "index2",
                        "_id": "id4"
                    }
                ]
            }
        }
    ]
}