赞
踩
作者:来自 Elastic Jeff Vestal, Jack Conradson
在 8.14 中,Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率,以及它们如何增强你的搜索操作。
检索器是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求,简化了应用程序中的搜索逻辑。它还减少了对客户端逻辑的需求,而客户端逻辑通常需要组合来自多个查询的结果。
初始版本中包含三种类型的检索器。每种检索器都针对特定目的而设计,组合起来后,它们可实现复杂的搜索操作。
可用的类型包括:
对于传统查询,查询是整体搜索 API 调用的一部分。检索器的不同之处在于,它们被设计为独立实体,可以单独使用或轻松组合使用。这种模块化方法在设计搜索策略时提供了更大的灵活性。
检索器被设计为 “retriever tree - 检索器树” 的一部分,这是一种层次结构,通过阐明搜索操作的顺序和逻辑来定义搜索操作。这种结构使复杂的搜索更易于管理,更易于开发人员理解,并允许在将来轻松添加新功能。
检索器支持可组合性,允许你构建管道并集成不同的检索策略。这允许轻松测试不同的检索组合。它们还提供对文档评分和筛选方式的更多控制。例如,你可以指定最低分数阈值,应用复杂的过滤器而不影响评分,并使用诸如 terminate_after 之类的参数进行性能优化。
与传统查询元素保持向后兼容性,自动将它们转换为适当的检索器。
让我们看一些使用检索器的示例。我们使用 IMDB 示例数据集。
你可以运行随附的 jupyter 笔记本,将 IMDB 数据导入无服务器搜索项目,并自行运行以下示例!
高层次设置是:
- GET /imdb_movies/_search?pretty
- {
- "retriever": {
- "standard": {
- "query": {
- "term": {
- "overview": "clueless"
- }
- }
- }
- },
- "size": 3,
- "fields": [
- "names",
- "overview"
- ],
- "_source": false
- }
- 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
- }
- 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
- }
- 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 检索功能和用户友好性向前迈出的重要一步。它们可以以管道方式链接起来,每个检索器应用其逻辑并将结果传递给链中的下一个项目。通过允许更结构化、更灵活和更高效的搜索操作,检索器可以显著增强搜索体验。
以下资源提供了有关检索器的更多详细信息。
亲自尝试上述代码!你可以运行随附的 jupyter 笔记本,将 IMDB 数据导入 Elastic Serverless Search 项目!
准备好自己尝试一下了吗?开始免费试用。
想要获得 Elastic 认证吗?了解下一次 Elasticsearch 工程师培训何时开始!
原文:Elasticsearch retrievers - How to use search retrievers in Elasticsearch — Elastic Search Labs
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。