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

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...