当前位置: 首页 > 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文件…...

如何选择杭州GEO优化公司?2026年4月推荐评测口碑对比TOP7

据权威第三方Gartner预测,2026年搜索引擎访问量将下降25%,近四分之一的搜索流量向AI聊天机器人等新型载体转移,GEO(生成式引擎优化)已成为企业突破流量瓶颈、实现长期发展的核心战略。2026年4月,选择技术扎…...

Flutter图片宽高获取实战:本地与网络图片处理指南

1. Flutter图片宽高获取的核心场景 在移动应用开发中,图片处理是个高频需求。特别是在IM聊天应用里,用户发送的图片需要根据原始尺寸进行等比缩放,否则就会出现变形或者显示不全的问题。我做过一个社交项目,用户上传的图片尺寸千奇…...

UE Viewer终极教程:解锁虚幻引擎资源宝库的完整指南

UE Viewer终极教程:解锁虚幻引擎资源宝库的完整指南 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer UE Viewer是一款功能强大的虚幻引擎资源查看与导出工…...

nli-distilroberta-base生产环境:低延迟NLI服务在实时对话系统中的嵌入

nli-distilroberta-base生产环境:低延迟NLI服务在实时对话系统中的嵌入 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的轻量级自然语言推理(NLI)服务,专门为生产环境优化设计。它能快速判断两个句子之间的逻辑关系,为实…...

三菱伺服MR Configurator2试运行全攻略:从JOG到定位运行一键搞定

三菱伺服MR Configurator2试运行全攻略:从JOG到定位运行一键搞定 在工业自动化领域,伺服系统的精准调试往往决定着整条产线的运行效率。作为三菱电机旗下的核心产品,三菱伺服系统凭借其高响应性和稳定性,已成为众多自动化设备制造…...

RPG Maker MV/MZ插件生态技术深度解析:架构设计与性能优化实践

RPG Maker MV/MZ插件生态技术深度解析:架构设计与性能优化实践 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 在RPG游戏开发领域,RPG Maker MV和MZ作为主流…...

当LLM成为链上节点:2026奇点大会披露的首个AI原生Layer 1主网性能基准(TPS 47,200,终局延迟<87ms)

第一章:2026奇点智能技术大会:AI原生区块链应用 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AI原生区块链”主题轨道,聚焦模型权重链上存证、推理过程可验证、智能合约与LLM深度协同等前沿范式。区别于传统Web3应用将…...

宜搭低代码进阶实战:从判断题到复杂场景的构建指南

1. 从判断题到实战:宜搭低代码的核心组件解析 第一次接触宜搭低代码平台时,我和很多人一样被那些判断题绕得头晕。比如"自定义页面中的连接块、容器和布局容器组件都可以配置循环数据功能"这道题,看似简单却藏着三个关键知识点。在…...

Superset开发环境搭建指南:从零开始本地部署

1. 认识Superset:为什么选择它? Superset是Apache基金会旗下的开源数据可视化工具,用Python编写,基于Flask框架。我第一次接触它是在2018年,当时团队需要替换昂贵的商业BI工具。经过对比测试,Superset的响…...

AIGlasses_for_navigation惊艳效果:便利店货架中红牛与AD钙奶并排摆放识别特写

AIGlasses_for_navigation惊艳效果:便利店货架中红牛与AD钙奶并排摆放识别特写 1. 引言:当AI眼镜“看懂”便利店货架 想象一下,你走进一家便利店,货架上琳琅满目的商品让人眼花缭乱。你想找一瓶红牛,但它在哪一排&am…...