Elasticsearch:确保业务规则与语义搜索无缝协作
作者:来自 Elastic Kathleen DeRusso

利用查询规则与语义搜索和重新排序相结合的强大功能。
更多阅读:
-
Elasticsearch 8.10 中引入查询规则 - query rules
-
Elasticsearch 查询规则现已正式发布 - query rules
你是否知道查询规则(query rules)可以与语义搜索无缝协作?使用查询规则作为检索器,将语义搜索和复杂逻辑(例如 RRF 或语义重新排序)与查询规则的强大功能相结合从未如此简单。
查询规则是我们相关性工具箱中的一个重要工具,
介绍查询规则检索器
规则检索器(rule retriever)就是所谓的复合检索器(ompound retriever),它允许在检索器树中链接复杂的行为,其中操作顺序很重要。
与规则查询(rule query)一样,规则检索器适用于已定义的查询规则集。你可以使用查询规则 CRUD API(uery rules CRUD API)创建规则集。
这在实践中是什么样子的?这是一个简单查询规则集的示例,当 query_string 参数与 puggles 匹配时,它会固定 id 为 id1 的文档:
PUT /_query_rules/my-ruleset
{"rules": [{"rule_id": "rule1","type": "pinned","criteria": [{"type": "exact","metadata": "query_string","values": [ "puggles" ]}],"actions": {"ids": ["id1"]}}]
}
接下来,这里有一个与该规则集匹配的规则检索器的简单示例:
POST my-index/_search
{"retriever": {"rule": {"match_criteria": {"query_string": "puggles"},"ruleset_ids": ["my-ruleset"],"retriever": {"standard": {"query": {"query_string": {"query": "puggles"}}}}}}
}
在本例中,我们只是定义了一个 standard 子检索器,它是一个简单的 query_string 查询。这与当今规则查询的工作方式非常相似,即通过指定 organic 查询。检索器将返回应用了匹配规则的搜索结果列表。
语义搜索和查询规则
这个简单的例子并没有展示查询规则的真正威力:在语义搜索之上应用业务规则。这可以帮助返回对促销活动很重要的结果,或者简单地 “修复” 语义搜索没有返回我们想要的结果的特定查询。
我们可以使用相同的检索器框架,通过在定义的 standard 检索器下指定这些查询,使用语义搜索执行查询规则。以下是使用 semantic 查询的示例:
POST my-index/_search
{"retriever": {"rule": {"match_criteria": {"query_string": "puggles"},"ruleset_ids": [ "my-ruleset" ],"retriever": {"standard": {"query": {"semantic": {"field": "semantic_field","query": "what is the best pug mix?"}}}}}}
}
类似地,当使用查询规则检索器定义为标准检索器时,sparse_vector 和 knn 查询将无缝地工作。
重新排序和查询规则
你可以通过将 rrf 检索器嵌套在 rule 检索器下,将 RRF 与查询规则结合起来,例如:
POST my-index/_search
{"retriever": {"rule": {"match_criteria": {"query_string": "puggles"},"ruleset_ids": ["my-ruleset"],"retriever": {"rrf": {"retrievers": [{"standard": {"query": {"semantic": {"field": "semantic_field","query": "what is the best pug mix?"}}}},{"standard": {"query": {"query_string": {"query": "puggles"}}}}]}}}}
}
重要提示:顺序在这里很重要。虽然从技术上讲,没有什么可以阻止你在规则检索器上运行 RRF,但由于检索器树中的操作顺序,这将无法按预期工作。当你运行规则检索器时,为了确保所有规则都按预期应用,规则检索器必须始终是最外层/顶层检索器。
同样,你可以将查询规则与语义重新排序(semantic reranking)相结合。以下是使用我们的 Elastic 重新排序器(Elastic reranker)的示例:
POST my-index/_search
{"retriever": {"rule": {"match_criteria": {"query_string": "puggles"},"ruleset_ids": [ "my-ruleset" ],"retriever": {"text_similarity_reranker": {"retriever": {"standard": {"query": {"semantic": {"field": "semantic_field","query": "what is the best pug mix?"}}}}}},"field": "text_field","inference_id": "elastic-rerank-endpoint","inference_text": "what is the best pug mix?"}}
}
综上所述,这里有一个示例,说明如何将语义、sparse_vector、knn 和词汇文本搜索查询与 RRF 和语义重新排序结合起来,并在它们之上应用查询规则:
POST my-index/_search
{"retriever": {"rule": {"match_criteria": {"query_string": "puggles"},"ruleset_ids": [ "my-ruleset" ],"retriever": {"text_similarity_reranker": {"retriever": {"rrf": {"retrievers": [{"standard": {"query": {"sparse_vector": {"field": "sparse_field","inference_id": "elser-endpoint","query": "what is the best pug mix?"}}}},{"standard": {"query": {"knn": {"field": "dense_field","query_vector": [ 1, 2, 3 ],"k": 10,"num_candidates": 100}}}},{"standard": {"query": {"semantic": {"field": "semantic_field","query": "what is the best pug mix?"}}}},{"standard": {"query": {"query_string": {"query": "puggles"}}}}]}},"field": "text_field","inference_id": "elastic-rerank-endpoint","inference_text": "what is the best pug mix?"}}}}
}
组合规则类型
查询规则(query rules)不再只适用于固定文档!在 Elasticsearch 8.16 中,我们引入了一种新的规则类型,即排除。这允许你指定你永远不希望在搜索结果中返回的文档,以及你想要固定在搜索结果顶部的文档。
排除(exclude)规则的用例包括但不限于:
- 通过删除对查询无用或不相关的结果来修复特定查询中的相关性问题
- 暂时抑制我们不希望在某个时间之前在任何搜索结果中返回的结果
以下是包含固定(pinned)和排除(excluded)规则的查询规则集的示例:
PUT /_query_rules/my-ruleset
{"rules": [{"rule_id": "rule1","type": "pinned","criteria": [{"type": "exact","metadata": "query_string","values": [ "puggles" ]}],"actions": {"ids": ["id1"]}},{"rule_id": "rule2","type": "exclude","criteria": [{"type": "exact","metadata": "query_string","values": [ "chiweenies" ]}],"actions": {"ids": ["id2"]}}]
}
规则是根据匹配条件应用的,因此规则检索器可以在同一查询中匹配固定文档和排除文档。
试试看吧!
规则检索器在结合语义搜索和重排序策略时表现得异常强大,因为它在利用语义搜索能力的同时,还提供了对搜索结果的精细控制。规则检索器已经在我们的 serverless 服务中提供,并将在 8.17.0 及更高版本的 Stack 中可用。
Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。
原文:Ensuring business rules work seamlessly with semantic search - Elasticsearch Labs
相关文章:
Elasticsearch:确保业务规则与语义搜索无缝协作
作者:来自 Elastic Kathleen DeRusso 利用查询规则与语义搜索和重新排序相结合的强大功能。 更多阅读: Elasticsearch 8.10 中引入查询规则 - query rules Elasticsearch 查询规则现已正式发布 - query rules 你是否知道查询规则(query ru…...
【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧
【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧 目录 文章目录 【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧目…...
【LuaFramework】LuaFramework_UGUI_V2框架学习
GitHub - jarjin/LuaFramework_UGUI_V2: 基于tolua的热更新框架V2 旧版本是Unity 5.0,这个是新版本支持更高版本的 导入工程后先清除wrap 然后重新生成wrap,你会发现有个报空null,框架的问题总结下所有的框架wrap相关报错问题和修复方法&…...
使用 AOP 在 Spring Boot 中实现跟踪和日志记录
在现代应用程序中,尤其是使用微服务构建的应用程序,跟踪和日志记录在跟踪流经各种服务的请求方面起着至关重要的作用。跟踪可帮助开发人员诊断问题、监控性能并了解用户在多个系统中的旅程。 在此博客中,我们将介绍如何使用traceId从前端生成…...
如何永久解决Apache Struts文件上传漏洞
Apache Struts又双叒叕爆文件上传漏洞了。 自Apache Struts框架发布以来,就存在多个版本的漏洞,其中一些漏洞涉及到文件上传功能。这些漏洞可能允许攻击者通过构造特定的请求来绕过安全限制,从而上传恶意文件。虽然每次官方都发布补丁进行修…...
FPGA远程升级 -- FLASH控制
简介 前文讲到如何实现XILINX芯片程序跳转,但升级程序是事先通过VIVADO工具将两个程序合成一个BIN文件实现升级的,并不能在线更新升级。要实现远程升级的能力需要对FPGA的FLASH进行在线写入升级程序。 FLASH介绍 本次设计FLASH选用的是S25FL128芯片&…...
企业内训|高智能数据构建、Agent研发及AI测评技术内训-吉林省某汽车厂商
吉林省某汽车厂商为提升员工在AI大模型技术方面的知识和实践能力,举办本次为期8天的综合培训课程。本课程分为两大部分:面向全体团队成员的AI大模型技术结构与行业应用,以及针对技术团队的高智能数据构建与Agent研发。课程内容涵盖非结构化数…...
ARM异常处理 M33
1. ARMv8-M异常类型及其详细解释 ARMv8-M Exception分为两类:预定义系统异常(015)和外部中断(1616N)。 各种异常的状态可以通过Status bit查看,获取更信息的异常原因: CFSR是由UFSR、BFSR和MMFSR组成: 下面列举HFSR、MMFSR、…...
(补)算法刷题Day24: BM61 矩阵最长递增路径
题目链接 思路 方法一:dfs暴力回溯 使用原始used数组4个方向遍历框架 , 全局添加一个最大值判断最大的路径长度。 方法二:加上dp数组记忆的优雅回溯 抛弃掉used数组,使用dp数组来记忆遍历过的节点的最长递增路径长度。每遍历到已…...
探索 Bokeh:轻松创建交互式数据可视化的强大工具
探索 Bokeh:轻松创建交互式数据可视化的强大工具 在数据科学和数据分析领域,交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库,它可以帮助我们快速构建高质量的交互式图表和仪表盘,同时兼具高性能和灵活性。…...
【Rust自学】6.1. 定义枚举
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.1.1. 什么是枚举 枚举允许我们列举所有可能的值来定义一个类型。这与其他编程语言中的枚举类似,但 Rust 的枚举更加灵活和强…...
【Java基础面试题035】什么是Java泛型的上下界限定符?
回答重点 Java泛型的上下界限定符用于对泛型类型参数进行范围限制,主要有上界限定符和下届限定符。 1)上界限定符 (? extends T): 定义:通配符?的类型必须是T或者T的子类,保证集合元素一定是T或者T的子类作用&…...
0基础学前端系列 -- 深入理解 HTML 布局
在现代网页设计中,布局是至关重要的一环。良好的布局不仅能提升用户体验,还能使内容更具可读性和美观性。HTML(超文本标记语言)结合 CSS(层叠样式表)为我们提供了多种布局方式。本文将详细介绍流式布局、Fl…...
【python高级】342-TCP服务器开发流程
CS模式:客户端-服务端模式 TCP客户端开发流程介绍(五步)(C端) 1.创建客户端套接字对象 2.和服务端套接字建立连接 3.发送数据 4.接收数据 5.关闭客户端套接字 TCP服务端开发流程(七步)…...
《计算机组成及汇编语言原理》阅读笔记:p48-p81
《计算机组成及汇编语言原理》学习第 4 天,p48-p81 总结,总计 34 页。 一、技术总结 1.CISC vs RISC p49, complex instruction set computing For example, a complex instruction set computing (CISC) chip may be able to move a lar…...
AI在传统周公解梦中的技术实践与应用
本文深入探讨了人工智能在传统周公解梦领域的技术实践与应用。首先介绍了传统周公解梦的背景与局限性,随后详细阐述了 AI 技术如何应用于梦境数据的采集、整理与分析,包括自然语言处理技术对梦境描述的理解,机器学习算法构建解梦模型以及深度…...
GIS数据处理/程序/指导,街景百度热力图POI路网建筑物AOI等
简介其他数据处理/程序/指导!!!(1)街景数据获取(2)街景语义分割后像素提取,指标计算代码(绿视率,天空开阔度、视觉熵/景观多样性等)(3…...
ssr实现方案
目录 序言 一、流程 二、前端要做的事情 三、节点介绍 四、总结 序言 本文不是详细的实现过程,是让你最快最直接的理解ssr的真正实现方法,有前端经验的同学,能够很好的理解过程,细节根据具体项目实现 一、前端要做的事情 1.…...
手动修改nginx-rtmp模块,让nginx-rtmp-module支持LLHLS
文章目录 1. 背景2. 开发环境搭建2.1 ffmpeg在ubuntu上安装2.2 nginx-rtmp-module在ubuntu上安装2.3 安装vscode环境2. 修改nginx-rtmp-module2.1 主要更新内容2.2 新增配置项2.3 代码更新3. LLHLS验证方法3.1 配置验证3.2 功能验证4. 注意事项5. 已知问题6. 后续计划1. 背景 …...
gitee别人仓库再上传自己仓库
一、新建一个自己的Git仓库 如果没有注册账号的朋友,可以先去注册一个Gitee的账号,用于管理自己的代码特别好用!!! 接下来就是在gitee上新建一个自己的仓库,如下图所示 二、右建 Git Bush Here删除.git文件…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...
