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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis框架学习笔记(三):MyBatis重要文件详解:配置文件与映射文件

1 mybatis-config.xml-配置文件详解 1.1 说明 (1)mybatis 的核心配置文件(mybatis-config.xml),比如配置 jdbc 连接信息,注册 mapper 等等都是在这个文件中进行配置,我们需要对这个配置文件有详细的了解 (2&#x…

如何做好漏洞扫描工作提高网络安全

在数字化浪潮席卷全球的今天,企业数字化转型已成为提升竞争力、实现可持续发展的关键路径。然而,这一转型过程并非坦途,其中网络安全问题如同暗礁般潜伏,稍有不慎便可能引发数据泄露、服务中断乃至品牌信誉受损等严重后果。因此&a…

【Linux】磁盘性能压测-FIO工具

一、FIO工具介绍 fio(Flexible I/O Tester)是一个用于评估计算机系统中 I/O 性能的强大工具。 官网:fio - fio - Flexible IO Tester 注意事项! 1、不要指定文件系统名称(如/dev/mapper/centos-root),避…

socket编程(2) -- TCP通信

TCP通信 2. 使用 Socket 进行TCP通信2.1 socket相关函数介绍socket()bind()listen()accept()connect()2.2 TCP协议 C/S 模型基础通信代码 最后 2. 使用 Socket 进行TCP通信 Socket通信流程图如下: 这里服务器段listen是监听socket套接字的监听文件描述符。如果客户…

Excel第30享:基于辅助列的条件求和

1、需求描述 如下图所示,现要统计2022年YTD(Year To Date:年初至今日)各个人员的“上班工时(a2)”。 下图为系统直接导出的工时数据明细样例。 2、解决思路 Step1:确定逻辑。“从日期中提取出…

[spring] Spring MVC - security(上)

[spring] Spring MVC - security(上) 这部分的内容基本上和 [spring] rest api security 是重合的,主要就是添加 验证(authentication)和授权(authorization)这两个功能 即: 用户…

构造函数的初始化列表,static成员,友元,内部类【类和对象(下)】

P. S.:以下代码均在VS2022环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

2-31 基于matlab的微表情识别

基于matlab的微表情识别。通过gabor小波提取表情特征,pca进行降维,ELM分类器训练,然后选择待识别的微表情,提取特征后输入训练好的模型进行分类,识别结果由MATLAB的GUI输出。程序已调通,可直接运行。 2-31 …

Tomcat多实例

一、Tomcat多实例 Tomcat多实例是指在同一台服务器上运行多个独立的tomcat实例,每个tomcat实例都具有独立的配置文件、日志文件、应用程序和端口,通过配置不同的端口和文件目录,可以实现同时运行多个独立的Tomcat服务器,每个服务…

Fastjson2使用JSONOObject或者mao转换为JSON字符串时丢失Null值字段

最近在工作中发现问题fastJson转换为JSONString时丢失值为null的问题特此解决。 public class test001 {public static void main(String[] args) {JSONObject jsonObject new JSONObject();jsonObject.put("foo1", "bar");jsonObject.put("foo2&quo…

19. 地址转换

地址转换 题目描述 Excel 是最常用的办公软件。每个单元格都有唯一的地址表示。比如:第 12 行第 4 列表示为:"D12",第 5 行第 255 列表示为"IU5"。 事实上,Excel 提供了两种地址表示方法,还有一…

代码随想录第50天|单调栈

739. 每日温度 参考 思路1: 暴力解法 思路2: 单调栈 使用场合: 寻找任一个元素的右边或者左边第一个比自己大或者小的元素位置, 存放的是遍历过的元素 记忆: 单调栈是对遍历过的元素做记录, 一般是对栈顶的元素 nums[mystack.top()] 做赋值操作的 如果想找到右边的元素大于左…

Efficient Estimation of Word Representations in Vector Space论文笔记解读

基本信息 作者TomasMikolovdoi10.48550发表时间2013期刊ICLR网址http://arxiv.org/abs/1301.3781 研究背景 1. What’s known 既往研究已证实 前馈神经网络语言模型(NNLM) 循环神经网络语言模型(RNNLM) 2. What’s new 创新点 Word2vec有两种模型:CBOW和Skip-gr…

【区块链 + 智慧政务】一体化政务数据底座平台 | FISCO BCOS应用案例

为进一步贯彻落实《全国一体化政务大数据体系建设方案》、《中共中央国务院关于构建数据基础制度更好发挥 数据要素作用的意见》精神,一体化政务数据底座平台结合相应城市的数字经济现状基础、当前任务及未来发展 战略,规划建设数据底座,持续…

Qt QWebSocket网络编程

学习目标:Qt QWebSocket网络编程 学习前置环境 QT TCP多线程网络通信-CSDN博客 学习内容 WebSocket是一种通过单个TCP连接提供全双工通信信道的网络技术。2011年,IETF将WebSocket协议标准化为 RFC6455,QWebSocket可用于客户端应用程序和服…

社区团购小程序源码系统 带完整的安装代码以及搭建部署教程

系统概述 在这个数字化时代,线上活动成为了连接用户与组织者的桥梁。为了满足不同场景的需要,开发一个灵活、可定制的在线活动报名表单小程序显得尤为重要。本文将深入介绍一个自定义在线活动报名表单小程序的源码系统,并提供详细的搭建部署…

【JavaScript 算法】快速排序:高效的排序算法

🔥 个人主页:空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 快速排序(Quick Sort)是一种高效的排序算法,通过分治法将数组分为较小的子数组,递归地排序子数组。快速排序通常…

vue使用quill编辑器自定义附件上传方法,并根据上传附件名称生成链接

1、附件上传 需求: 在编辑器中上传word,pdf,excel等附件后,能根据上传附件的名称生成link链接,在展示页面能实现点击链接下载或预览附件,效果图如下: 实现方法: quill编辑器自身带有link,但不满足需求&…

Java---SpringBoot详解二

勤奋勤劳铸梦成, 晨曦微露起长征。 汗水浇灌花似锦, 寒窗苦读岁月明。 千锤百炼心如铁, 万里征途志不倾。 持之以恒终有日, 功成名就笑谈中。 目录 一,统一响应结果 二,三层架构 三,分层解耦 四…

基于html开发的在线网址导航在线工具箱源码

基于html开发的在线网址导航在线工具箱源码,将全部文件复制到服务器,入口文件是index.html 如需修改网址,可修改index.html 如需修改关于页面,可修改about里面的index页面 源码下载:https://download.csdn.net/down…