作者:來自 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