当前位置: 首页 > article >正文

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


http://www.kler.cn/a/472439.html

相关文章:

  • C语言的语法
  • 流媒体内网穿透/组网/网络映射EasyNTS上云网关启动失败如何解决?
  • [Linux]redis5.0.x升级至7.x完整操作流程
  • 从零开始开发纯血鸿蒙应用之实现起始页
  • SQL从入门到实战
  • Java到底是值传递还是引用传递????
  • Golang学习笔记_17——方法
  • 【Leetcode】单词拆分:dfs解法、dp解法
  • 计算机网络之---物理层的基本概念
  • 大数据hadoop和hive能支持多大
  • Linux性能优化策略:让你的系统运行如飞
  • Boost.Asio 的 TCP 通信教程
  • Redis 渐进式遍历与数据库管理
  • UE5AI感知组件
  • 用CLEAN算法实现杂波抑制的Matlab仿真程序
  • 《深度学习模型在鸿蒙分布式框架下的跨设备高效之旅》
  • Tauri教程-基础篇-第二节 Tauri的核心概念上篇
  • .NET中的框架和运行环境
  • Vue.js组件开发-如何避免props中的数据冲突
  • 面试手撕-多线程死锁
  • 升级 Spring Boot 3 配置讲解 —— 为何 SpringBoot3 淘汰了 JDK8?
  • 探索大型语言模型新架构:从 MoE 到 MoA
  • 浙江生易达自控科技:品质与实力的象征
  • idea 远程docker 本地需要安装docker吗
  • 阿里云代理商热销产品推荐
  • 05-Linux系统编程之进程(下)