查询规则API

edit

查询规则允许您配置每个查询的规则,这些规则在查询时应用于匹配特定规则的查询。 查询规则被组织成规则集,这些规则集是与传入查询匹配的查询规则的集合。 查询规则通过使用规则查询来应用。

如果一个查询匹配了规则集中的一个或多个规则,查询将在搜索前被重写以应用这些规则。 这允许仅为匹配特定术语的查询固定文档。

使用以下API来管理查询规则集:

创建或更新查询规则集

edit

创建或更新查询规则集。

请求

edit

PUT _query_rules/

先决条件

edit

需要 manage_search_query_rules 权限。

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

请求体

edit
rules
(必需,对象数组) 此查询规则集包含的具体规则。

每个规则集的规则数量限制为100条。 可以通过设置xpack.applications.rules.max_rules_per_ruleset集群参数将其增加到最多1000条。

每条规则必须包含以下信息:

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

标准必须包含以下信息:

  • type(必需,字符串)标准的类型。 支持以下标准类型:

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

操作取决于规则类型。 以下操作适用于固定排除规则:

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

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

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

示例

edit

以下示例创建了一个名为 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": "exclude",
            "criteria": [
                {
                    "type": "fuzzy",
                    "metadata": "user_query",
                    "values": [ "rescue dogs" ]
                }
            ],
            "actions": {
                "docs": [
                    {
                        "_index": "index1",
                        "_id": "id3"
                    },
                    {
                        "_index": "index2",
                        "_id": "id4"
                    }
                ]
            }
        }
    ]
}

获取查询规则集

edit

检索有关查询规则集的信息。

请求

edit

GET _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

返回有关所有存储的查询规则集的信息。将返回每个规则集的规则数量的摘要信息,并且可以使用获取查询规则集命令返回完整详细信息。

请求

edit

GET _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

删除查询规则集及其关联数据。 这是一个不可恢复的破坏性操作。

请求

edit

DELETE _query_rules/

前提条件

edit

需要 manage_search_query_rules 权限。

路径参数

edit
<ruleset_id>
(必需,字符串)

响应代码

edit
400
未提供ruleset_id
404 (Missing resources)
未找到与ruleset_id匹配的查询规则集。

示例

edit

以下示例删除了名为 my-ruleset 的查询规则集:

DELETE _query_rules/my-ruleset/

创建或更新查询规则

edit

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

请求

edit

PUT _query_rules//_rule/

先决条件

edit

需要 manage_search_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(可选,字符串数组)要应用规则的文档的唯一文档ID。 只能指定idsdocs中的一个,且必须指定至少一个。
  • docs(可选,对象数组)要应用规则的文档。 只能指定idsdocs中的一个,且必须指定至少一个。 规则中最多可以有100个文档。 您可以为每个文档指定以下属性:

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

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

示例

edit

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

  • my-rule1 将在 user_query 包含 pugs puggles 并且 user_country 完全匹配 us 时,选择带有 ID id1id2 的文档进行提升。
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

检索查询规则集内单个查询规则的信息。

请求

edit

GET _query_rules//_rule/

先决条件

edit

需要 manage_search_query_rules 权限。

路径参数

edit
<ruleset_id>
(必需,字符串)
<rule_id>
(必需,字符串)

响应代码

edit
400
缺少 ruleset_idrule_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重新添加相同的规则来恢复。

请求

edit

DELETE _query_rules//_rule/

前提条件

edit

需要 manage_search_query_rules 权限。

路径参数

edit
<ruleset_id>
(必需,字符串)
<rule_id>
(必需,字符串)

响应代码

edit
400
缺少 ruleset_idrule_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 的约束。

请求

edit

POST _query_rules//_test

先决条件

edit

需要 manage_search_query_rules 权限。

路径参数

edit
<ruleset_id>
(必需,字符串)

请求体

edit
match_criteria
(必需,对象) 定义应用于给定查询规则集中规则的匹配条件。 匹配条件应与规则中 criteria.metadata 字段定义的键匹配。

响应代码

edit
400
未提供 ruleset_idmatch_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"
        }
    ]
}