当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 接口基础知识3:详解url
  • C++基础(二十):常见C++11的新特性
  • Unity3D开发之传送带实现
  • C语言——二维数组
  • 检测精度评价指标召回率和精确率
  • C到C嘎嘎的衔接篇
  • [FPGA]-时序传输模型分析
  • Python:while循环
  • Java之Java基础八(方法)
  • Spring webflux基础核心技术
  • Jetson-AGX-Xavier上 时间同步方案GPS+PPS+NTP+PTP
  • 深入理解C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符重载
  • 【laravel+Easyswoole】
  • 企业网三层架构
  • slf4j日志框架和logback详解
  • python3.6+scrapy+mysql 爬虫实战
  • [nginx文档翻译系列] 控制nginx
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【5+】跨webview多页面 触发事件(二)
  • 4. 路由到控制器 - Laravel从零开始教程
  • Angular 响应式表单之下拉框
  • ES6简单总结(搭配简单的讲解和小案例)
  • HTTP--网络协议分层,http历史(二)
  • JavaScript类型识别
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JWT究竟是什么呢?
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • miaov-React 最佳入门
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Xmanager 远程桌面 CentOS 7
  • 阿里云购买磁盘后挂载
  • 记一次删除Git记录中的大文件的过程
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端代码风格自动化系列(二)之Commitlint
  • 跳前端坑前,先看看这个!!
  • 物联网链路协议
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​插件化DPI在商用WIFI中的价值
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (poj1.3.2)1791(构造法模拟)
  • (独孤九剑)--文件系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转) Face-Resources
  • (转)EOS中账户、钱包和密钥的关系
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)原始图像数据和PDF中的图像数据
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *p++,*(p++),*++p,(*p)++区别?
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .Net IOC框架入门之一 Unity
  • .net SqlSugarHelper