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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:解决vim打开文件默认为replace模式

现象 Ubuntu打开 vim 默认为 replace 模式 原因 终端的编码设置与目标机器的编码设置不同。 解决方案 修改 vim 配置文件( /etc/vim/vimrc或者~/.vimrc),添加: set termencodingutf-8 set fileformatsunix set encodingprcP.S. vimrc 中注释使用英…

知识图谱与LLMs:实时图分析(通过其关系的上下文理解数据点)

大型语言模型 (LLM) 极大地改变了普通人获取数据的方式。不到一年前,访问公司数据需要具备技术技能,包括熟练掌握各种仪表板工具,甚至深入研究数据库查询语言的复杂性。然而,随着 ChatGPT 等 LLM 的兴起,随着所谓的检索…

Ubuntu系统安装mysql之后进行远程连接

1.首先要配置数据库允许进行远程连接 1.1 打开MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf1.2 修改 bind-address 行 #按i进入插入模式 bind-address 0.0.0.0 #按 Esc 键退出插入模式。 #输入:wq 然后按 Enter 保存并退…

React学习笔记02-----

一、React简介 想实现页面的局部刷新,而不是整个网页的刷新。AJAXDOM可以实现局部刷新 1.特点 (1)虚拟DOM 开发者通过React来操作原生DOM,从而构建页面。 React通过虚拟DOM来实现,可以解决DOM的兼容性问题&#x…

Window10下安装WSL-Ubuntu20.04

1.开启并更新WSL 1.1开启WSL 首先先来看一下电脑是否能够开启WSL:待补充... 然后再来看一下如何开启WSL:win->设置->应用->应用和功能->程序和功能,如下所示: 最后选择启用或关闭Windows功能,开启两个选项:1.Hyper-V…

工具推荐|语音轻松记笔记,AI帮你识别和润色

# 你日常有没有遇到这样的场景? 偶尔有一些奇思妙想想要记录下来,但没有一个轻量的工具,往往会想着想着就把这个想法抛之脑后。特别是搞短视频的,你也许希望把当时的想法录下来,稍微剪辑下就能出一条不错的口播视频。…

springboot的JWT令牌

生成JWT令牌 依赖 <!--jwt令牌--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>javax.xml.bind<…

【LeetCode】最小栈

目录 一、题目二、解法完整代码 一、题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元…

ACE之ACE_Handle_Set

简介 ACE_Handle_Set是对select io复用中fd_set的封装 结构 #mermaid-svg-dwnlrGqy52ds6ctC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dwnlrGqy52ds6ctC .error-icon{fill:#552222;}#mermaid-svg-dwnlrGqy52…

微信小程序开发基础知识6----使用npm包

一、小程序对npm的支持与限制 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用npm 包有如下3个限制: ① 不支持依赖于 Node.js 内置库的包 ② 不支持依赖于浏览器内置对象的包 ③ 不支持依赖于…

Java算法-力扣leetcode-209. 长度最小的子数组

209. 长度最小的子数组 给定一个含有 n ****个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 ****target ****的长度最小的 **** 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度 。 如果不存在符合条件的子数组&#xff0c;…

pico+unity预设配置

picosdk中有很多预设的配置、使用预设配置的方法有 1、创建 XR Origin、展开 XR Origin > Camera Offset&#xff0c;选中 LeftHand Controller。点击 XR Controller (Action-Based) 面板右上角的 预设 按钮 2、打开Assets\Samples\XR Interaction Toolkit\2.5.2\Starter A…

Linux--YUM仓库部署及NFS共享存储

目录 一、YUM仓库服务 1.1 YUM介绍 1.2 yum 常用的命令 1.3 YUM 源的提供方式 1.3.1 配置本地 yum 源仓库 1.3.2 配置 ftp 源 1.3.3 配置http服务源 二、NFS 共享存储 2.1 NFS基本概述 2.2 为什么使用 NFS 共享存储 2.3 NFS 应用场景 2.4 NFS 实现原理 2.5 NFS文件…

配置提交节点

方法一&#xff1a;配置lsf.cluster.<clustername> 到$LSF_TOP/conf目录&#xff0c;编辑lsf.cluster.<clustername>文件。将下面配置中的server列设置成0&#xff0c;此节点就会作为Login节点。此方法通过bhosts不可以查看到这个节点。 # cd $LSF_ENVDIR# vim l…

gitlab 搭建使用

1. 硬件要求 ##CPU 4 核心500用户 8 核心1000用户 ##内存 4 G内存500用户 8 G内存1000用户 2. 下载 链接 3. 安装依赖 yum -y install curl openssh-server postfix wget 4. 安装gitlab组件 yum -y localinstall gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm 5. 修改配置文…

Qt Quick qml自定义控件:qml实现电池控件

qml入门进阶专栏地址:https://blog.csdn.net/yao_hou/category_9951228.html?spm=1001.2014.3001.5482 本篇博客介绍如何使用qml来实现电池控件,效果图如下: 下面给出实现代码 Battery.qml /*电池组件*/import QtQuick 2.15 import QtQuick.Controls 2.15Rectangle {id: b…

实验05 单元测试

知识点 单元测试的定义 单元测试&#xff08;Unit Testing&#xff09;是一种软件开发的验证过程&#xff0c;旨在隔离并检测软件组件&#xff08;通常是函数、方法或类&#xff09;的单个单元的功能是否按照预期执行。每个测试用例验证特定的条件或功能&#xff0c;确保代码的…

Apache Kylin: 大数据时代的分析引擎

在大数据时代&#xff0c;企业面临着数据量激增的挑战&#xff0c;传统的数据分析方法已经无法满足快速、高效的处理需求。Apache Kylin作为开源的分布式分析引擎&#xff0c;为超大规模数据集提供了快速的洞察能力。本文将介绍Kylin的基本概念、架构、特性以及如何部署和使用K…

音视频开发—使用FFmpeg将YUV文件编码成H264裸流文件 C语言实现

文章目录 1.准备工作2.压缩编码工作流程3.详细步骤1. 初始化日志和参数检查2. 输入/输出文件的打开3. 查找和初始化编码器4. 打开编码器5. 帧内存的分配和初始化6. 设置转换上下文&#xff08;SWS&#xff09;7. 读取和转换数据8. 编码过程9. 资源清理 4.完整示例代码 1.准备工…

熊海CMS漏洞练习平台的一次xss、sql注入、越权黑盒思路分析

简介 熊海CMS是由熊海开发的一款功能丰富的网站综合管理系统&#xff0c;广泛应用于个人博客、个人网站以及企业网站&#xff0c;本文章用于黑盒测试&#xff0c;如果需要「源码审计」后台回复【「CMS」】获取即可&#xff0c;精心准备了40多个cms源码漏洞平台&#xff0c;供宝…