创建或更新查询规则集

编辑

创建或更新查询规则集。

请求

编辑

PUT _query_rules/<规则集_id>

先决条件

编辑

需要 manage_search_query_rules 权限。

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

请求主体

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

每个规则集最多包含 100 条规则。可以使用 xpack.applications.rules.max_rules_per_ruleset 集群设置将其增加到 1000 条。

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

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

条件必须包含以下信息

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

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

操作取决于规则类型。允许对 pinnedexclude 规则执行以下操作

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

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

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

示例

编辑

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

有两个规则与 my-ruleset 关联

  • user_query 包含 pugs puggles 并且 user_country 完全匹配 us 时,my-rule1 将固定 ID 为 id1id2 的文档。
  • query_string 模糊匹配 rescue dogs 时,my-rule2 将排除来自不同指定索引且 ID 为 id3id4 的文档。
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"
                    }
                ]
            }
        }
    ]
}