Elasticsearch:Query rules 疑难解答

作者:来自 Elastic Kathleen_DeRusso

查询规则(Query rules)为用户提供了一种对特定查询进行细粒度控制的方法。目前,查询规则的功能允许你将你选择的搜索结果固定在结果集的顶部,和/或根据上下文查询数据从结果集中排除特定文档。

这种类型的查找调整控制有几种用例。其中包括将业务规则(例如促销活动)应用于你的搜索结果或 “修复” 高度可见的问题查询。

查询规则可以使用规则查询(rule query)访问,并且很快将作为与 RRF 等重新排名策略配合使用的检索器(retriever)提供!

这篇文章是关于如何知道你的查询规则是否按预期工作。

让我们从一个非常简单的示例开始,其中包含一个固定规则和一个排除规则:

PUT my-index/_doc/my-pinned-doc
{
  "title": "My pinned document"
}

PUT my-index/_doc/my-excluded-doc
{
  "title": "My excluded document"
}


PUT _query_rules/my-ruleset
{
  "rules": [
    {
      "rule_id": "my-pinned-rule",
      "type": "pinned",
      "criteria": [
        {
          "type": "exact",
          "metadata": "match",
          "values": [
            "pinned"
          ]
        }
      ],
      "actions": {
        "ids": [
          "my-pinned-doc"
        ]
      }
    },
    {
      "rule_id": "my-exclude-rule",
      "type": "exclude",
      "criteria": [
        {
          "type": "exact",
          "metadata": "match",
          "values": [
            "exclude"
          ]
        }
      ],
      "actions": {
        "ids": [
          "my-excluded-doc"
        ]
      }
    }
  ]
}

当查询规则启动时,我们仅支持 pinned 规则。此规则保证指定的文档出现在搜索结果的顶部,无论它们是否会在原始查询中返回。因此,验证规则是否应用的解决方法可能是发出 match_none 查询作为规则查询的 organic 部分,确保任何返回的文档都是由于规则匹配而固定的命中。

对于上述示例,这可能看起来像:

POST my-index/_search
{
  "query": {
    "rule": {
      "organic": {
        "match_none": {}
      },
      "ruleset_ids": [
        "my-ruleset"
      ],
      "match_criteria": {
        "match": "pinned"
      }
    }
  }
}

此后,我们添加了 exclude 规则,用于识别结果集中永远不应返回的文档。

同样,对于 exclude 规则,你可以针对 ids 查询运行规则查询,或者针对非常小的数据集运行 match_all 查询:

POST my-index/_search
{
  "query": {
    "rule": {
      "organic": {
        "ids": {
          "values": [
            "my-excluded-doc"
          ]
        }
      },
      "ruleset_ids": [
        "my-ruleset"
      ],
      "match_criteria": {
        "match": "exclude"
      }
    }
  }
}

这不是最好的解决方案,因此我们在 Elasticsearch 8.16 版中引入了一个新的查询规则测试器 API 调用(query rule tester API call),它允许你确定哪些规则符合特定条件,以及它们的应用顺序。以下是如何调用它的示例:

POST _query_rules/my-ruleset/_test
{
  "match_criteria": {
    "match": "exclude"
  }
}

该调用将返回以下响应:

{
  "total_matched_rules": 1,
  "matched_rules": [
    {
      "ruleset_id": "my-ruleset",
      "rule_id": "my-exclude-rule"
    }
  ]
}

这在未来也同样适用,即使添加了新的规则,这些规则不会从搜索结果中选择或排除文档。

祝你愉快地管理搜索结果!

原文:Dec 11th, 2024: [EN] Troubleshooting query rules - Advent Calendar - Discuss the Elastic Stack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值