创建或更新查询规则

编辑

在查询规则集中创建或更新一个单独的查询规则。

请求

编辑

PUT _query_rules/<ruleset_id>/_rule/<rule_id>

先决条件

编辑

需要 manage_search_query_rules 权限。

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

请求体

编辑
type

(必需,字符串) 规则的类型。目前允许以下查询规则类型

  • pinned 将识别并把特定文档固定到搜索结果的顶部。
  • exclude 将从搜索结果中排除特定文档。
criteria
(必需,对象数组) 应用规则必须满足的条件。如果为一个规则指定了多个条件,则必须满足所有条件才能应用该规则。

条件必须具有以下信息

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

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

    actions
    (必需,对象) 匹配规则时要执行的操作。此操作的格式取决于规则类型。

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

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

    • _index (必需,字符串) 文档的索引。如果为空,则所有具有指定 _id 的文档都将在所有搜索索引中受到影响。
    • _id (必需,字符串) 唯一的 文档 ID

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

示例

编辑

以下示例在名为 my-ruleset 的查询规则集中创建一个新的查询规则,ID 为 my-rule1

  • user_query 包含 pugs *或* puggles 并且 user_country 完全匹配 us 时,my-rule1 将选择要提升的文档,其 ID 为 id1id2
resp = client.query_rules.put_rule(
    ruleset_id="my-ruleset",
    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"
        ]
    },
)
print(resp)
const response = await client.transport.request({
  method: "PUT",
  path: "/_query_rules/my-ruleset/_rule/my-rule1",
  body: {
    type: "pinned",
    criteria: [
      {
        type: "contains",
        metadata: "user_query",
        values: ["pugs", "puggles"],
      },
      {
        type: "exact",
        metadata: "user_country",
        values: ["us"],
      },
    ],
    actions: {
      ids: ["id1", "id2"],
    },
  },
});
console.log(response);
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"
        ]
    }
}