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

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服务端开发流程(七步)&#xf…...

《计算机组成及汇编语言原理》阅读笔记: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文件…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

git: early EOF

macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...