Elasticsearch:介绍 retrievers - 搜索一切事物
作者:来自 Elastic Jeff Vestal, Jack Conradson
在 8.14 中,Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率,以及它们如何增强你的搜索操作。
检索器是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求,简化了应用程序中的搜索逻辑。它还减少了对客户端逻辑的需求,而客户端逻辑通常需要组合来自多个查询的结果。
检索器的初始类型
初始版本中包含三种类型的检索器。每种检索器都针对特定目的而设计,组合起来后,它们可实现复杂的搜索操作。
可用的类型包括:
- standard- 返回传统查询中的顶级文档。这些类型通过支持现有的查询 DSL 请求语法实现向后兼容,让你可以按照自己的节奏迁移到检索器框架。
- kNN - 返回 kNN 搜索中的顶级文档。
- RRF - 使用倒数融合算法将多个第一阶段检索器组合并排名为单个结果集,无需或只需极少的用户调整。RRF 检索器是一种复合检索器,其过滤元素会传播到其子检索器。
检索器有何不同?它们为何有用?
对于传统查询,查询是整体搜索 API 调用的一部分。检索器的不同之处在于,它们被设计为独立实体,可以单独使用或轻松组合使用。这种模块化方法在设计搜索策略时提供了更大的灵活性。
检索器被设计为 “retriever tree - 检索器树” 的一部分,这是一种层次结构,通过阐明搜索操作的顺序和逻辑来定义搜索操作。这种结构使复杂的搜索更易于管理,更易于开发人员理解,并允许在将来轻松添加新功能。
检索器支持可组合性,允许你构建管道并集成不同的检索策略。这允许轻松测试不同的检索组合。它们还提供对文档评分和筛选方式的更多控制。例如,你可以指定最低分数阈值,应用复杂的过滤器而不影响评分,并使用诸如 terminate_after 之类的参数进行性能优化。
与传统查询元素保持向后兼容性,自动将它们转换为适当的检索器。
检索器使用示例
让我们看一些使用检索器的示例。我们使用 IMDB 示例数据集。
你可以运行随附的 jupyter 笔记本,将 IMDB 数据导入无服务器搜索项目,并自行运行以下示例!
高层次设置是:
- overview - 电影的简短摘要
- names - 电影的名称
- overview_dense - 从 e5-small 模型生成的 dense_vector
- overview_sparse - 使用 Elastic 的 ELSER 模型的稀疏向量。
- 仅使用 fields 并设置 _source:false 返回 names 和 overview 的文本版本
Standard - 搜索所有文本!
GET /imdb_movies/_search?pretty
{"retriever": {"standard": {"query": {"term": {"overview": "clueless"}}}},"size": 3,"fields": ["names","overview"],"_source": false
}
kNN - 搜索所有密集向量!
GET /imdb_movies/_search?pretty
{"retriever": {"knn": {"field": "overview_dense","query_vector_builder": {"text_embedding": {"model_id": ".multilingual-e5-small_linux-x86_64","model_text": "clueless slackers"}},"k": 5,"num_candidates": 5}},"size": 3,"fields": ["names","overview"],"_source": false
}
text_expansion - 搜索所有稀疏向量!
GET /imdb_movies/_search?pretty
{"retriever": {"standard": {"query": {"text_expansion": {"overview_sparse": {"model_id": ".elser_model_2_linux-x86_64","model_text": "clueless slackers"}}}}},"size": 3,"fields": ["names","overview"],"_source": false
}
rrf - 将所有事物结合起来!
GET /imdb_movies/_search?pretty
{"retriever": {"rrf": {"retrievers": [{"standard": {"query": {"term": {"overview": "clueless slackers"}}}},{"knn": {"field": "overview_dense","query_vector_builder": {"text_embedding": {"model_id": ".multilingual-e5-small_linux-x86_64","model_text": "clueless slackers"}},"k": 5,"num_candidates": 5}},{"standard": {"query": {"text_expansion": {"overview_sparse": {"model_id": ".elser_model_2_linux-x86_64","model_text": "clueless slackers"}}}}}],"rank_window_size": 5,"rank_constant": 1}},"size": 3,"fields": ["names","overview"],"_source": false
}
检索器的当前限制
检索器带有某些限制,用户应注意。例如,使用复合检索器时只允许查询元素(element)。这强制更清晰地分离关注点,并防止过度嵌套或独立配置带来的复杂性。此外,子检索器不得使用限制将复合检索器作为检索器树一部分的元素。
即使使用复杂的检索策略,这些限制也能提高性能和可组合性。
检索器最初作为技术预览版发布,因此其 API 可能会发生变化
结论
检索器代表了 Elasticsearch 检索功能和用户友好性向前迈出的重要一步。它们可以以管道方式链接起来,每个检索器应用其逻辑并将结果传递给链中的下一个项目。通过允许更结构化、更灵活和更高效的搜索操作,检索器可以显著增强搜索体验。
以下资源提供了有关检索器的更多详细信息。
- 使用检索器在 Elasticsearch 中进行语义重新排名
- 检索器 API 文档
- 检索器 - 搜索你的数据文档
亲自尝试上述代码!你可以运行随附的 jupyter 笔记本,将 IMDB 数据导入 Elastic Serverless Search 项目!
准备好自己尝试一下了吗?开始免费试用。
想要获得 Elastic 认证吗?了解下一次 Elasticsearch 工程师培训何时开始!
原文:Elasticsearch retrievers - How to use search retrievers in Elasticsearch — Elastic Search Labs
相关文章:

Elasticsearch:介绍 retrievers - 搜索一切事物
作者:来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中,Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率,以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…...

全面升级的对象创建——抽象工厂模式(Python实现和JAVA实现)
1. 引言 大家好!在之前的文章中,我们探讨了简单工厂和工厂方法模式: 轻松创建对象——简单工厂模式(Python实现) 轻松创建对象——简单工厂模式(Java实现) 灵活多变的对象创建——工厂方法模式…...

谷粒商城实战笔记-29~34-前端基础 - ES6
文章目录 零,安装Live Server插件一,创建前端工程1,创建工程2,在工程ES6中创建一个html文件 二,ES6 简介1,ES6 的历史 三,前端基础ES61,let 和 const1.1,let1.1.1 严格的…...
浔川官方撤销浔川总社部社长王*职位——浔川官方
2024年7月13日晚9点半,浔川社团举报中心接到举报, 询问情况后,才知,浔川社团前日(7月13日)发布了一篇文章《浔川回应浔川官方宣布官方账号将在CSDN进行无人管理——浔川官方》文章会被删除,官方…...

小白学python(第七天)
哈哈,这个系列的文章也有一段时间没更新,主要是最近在忙c嘎嘎,不过没事接下来会优先更python啦,那么我们先进入正题吧 函数的定义及调用 函数定义 格式:def 函数名(形参列表): 语…...
npm和yarn清理缓存命令
yarn清除缓存 1、查看yarn全局缓存目录 yarn cache dir2、清除缓存 yarn cache cleannpm 清除缓存 1、将node-modules文件夹先删除 2、清理缓存命令: npm cache clean --force3、重新安装一次即可 npm install /cnpm install...

数据结构之初始二叉树(1)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 树型结构 树的概念 与树的有关概念 树的表示形式 树的应用 二叉树 概念 两种特殊的…...

STM32-寄存器点灯案例详解
本文以PA1引脚点亮LED灯为案例,解析了STM32寄存器操作的配置过程,以及从手册查询方法和寄存器配置步骤。 一、概念 1.十六进制和二进制之间相互转换关系 首先,需要了解十六进制和二进制之间的基本转换方法。十六进制是一种基数为16的数制&…...

Github Action 自动部署更新静态网页服务
本文首发于 Anyeの小站,点击跳转 获得更优质的阅读体验 前言 贴一段胡话 在用过 应用:静态网页服务 之后,事实证明: 总而言之,自动化是一个很令人着迷的东西,摆脱重复繁琐的工作,解放了双手的…...
如何在CSS中控制动画的触发位置?
如何在CSS中控制动画的触发位置? 在CSS中控制动画的触发位置主要是通过transform属性来实现的。例如,如果你希望动画从某个固定的位置开始,可以设置transform: translate(x, y),其中x和y是你想让元素偏离其原始位置的距离。对于动…...

MFC流的形式读取图片
1.基于对话框布置控件 2.给控件绑定变量 3.给按钮控件添加响应函数 void CMFC流的形式读取图片Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画…...

查找PPT中某种字体的全部对应文字
本文章的目的是找到某种字体的文字,而不是替换某种字体的文字,也不是将某种字体全部替换为另外一种文字。 第一步:在PPT中按下ALTF11 出现以下窗口 第二步:点击插入->模块 第三步:将以下代码输入到窗体中 Sub F…...
相机光学(三十一)——暗房设置的要求
ISO标准通常在测试相机时指定对周围条件的要求。由于摄影ISO组试图保持这些要求与所有标准一致,所以我们总结了这个“技术说明”中的重要方面。 温度应保持在23C /- 2C的范围内。在设计空调系统时,请记住图表照明的耗电量和发热量。湿度需要在&#…...

Linux安全技术与防火墙
一、安全技术和防火墙 1.1 安全技术 入侵检测系统:特点是不阻断网络访问,主要是提供报警和时候报警,不主动介入。 入侵防御系统:透明模式工作,对数据包、网络监控、服务攻击、木马蠕虫、系统漏洞等等进行准确的分析和…...

C#中简单Socket编程
C#中简单Socket编程 Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。 接下来,我用C#语言来进行简单的TCP通信和UDP通信。 一、TCP通信 新建项目SocketTest,首先添加TCP通信的客户端代…...

UNIAPP_ReferenceError: TextEncoder is not defined 解决
错误信息 1、安装text-decoding npm install text-decoding2、main.js import { TextEncoder, TextDecoder } from text-decoding global.TextEncoder TextEncoder global.TextDecoder TextDecoder...

科普文:微服务技术栈梳理
概叙 如上两图所示,微服务架构下,需要的组件很多,上面中也并未列全。下面将梳理一下国内微服务架构下,用到的技术栈,仅供参考。 科普文:12种常见的软件架构-CSDN博客 没有最好的架构,只有最适…...

如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围
如何使用HTML和JavaScript读取文件夹中的所有图片并显示RGB范围 在这篇博客中,我将介绍如何使用HTML和JavaScript读取文件夹中的所有图片,并显示这些图片以及它们的RGB范围。这个项目使用现代浏览器提供的<input type"file" webkitdirecto…...

PDF公式转Latex
文章目录 摘要数据集 UniMER介绍下载链接 LaTeX-OCRUniMERNet安装UniMER 用的数据集介绍下载链接 PDF-Extract-Kit整体介绍效果展示评测指标布局检测公式检测公式识别 使用教程环境安装参考[模型下载](models/README.md)下载所需模型权重 在Windows上运行在macOS上运行运行提取…...

excel 百分位函数 学习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

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