检索器是 Elasticsearch 搜索 API 在 8.14.0 版本中添加并在 8.16.0 版本中正式推出的一个抽象概念。它支持在单个 _search
调用中配置多阶段检索流程。这简化了搜索应用程序的逻辑,因为您不再需要通过多个 Elasticsearch 调用配置复杂的搜索或实现额外的客户端逻辑来组合来自不同查询的结果。
本文档概述了检索器抽象概念。有关实现细节(包括重要的限制),请查看 _search
API 文档中的参考文档。
检索器类型
检索器有多种类型,每种类型都针对不同的搜索操作而定制。目前可用的检索器包括:
- 标准检索器 (Standard Retriever): 从传统查询返回排名靠前的文档。它模拟了传统查询,但在检索器框架的上下文中进行。这确保了向后兼容性,因为现有的
_search
请求仍然受支持。这样,您可以按照自己的节奏过渡到新的抽象概念,而无需混合使用不同的语法。
- kNN 检索器 (kNN Retriever): 在检索器框架的上下文中,从 knn 搜索返回排名靠前的文档。
- RRF 检索器 (RRF Retriever): 使用倒数秩融合 (RRF) 算法组合和排序多个第一阶段检索器的结果。它允许您将具有不同相关性指标的多个结果集组合成一个结果集。RRF 检索器是一种复合检索器,它的过滤器元素会传播到其子检索器。
- 规则检索器 (Rule Retriever): 在返回结果之前将查询规则应用于查询。
- 文本相似性重排序检索器 (Text Similarity Re-ranker Retriever): 用于语义重排序。需要先使用 Elasticsearch 推理 API 创建一个重排序任务。
检索器的优势
以下是检索器的优势及其与常规查询的区别:
- 简化的用户体验: 检索器允许在单个 API 调用中配置整个检索流程,从而简化了用户体验。它通过自动将传统查询元素转换为相应的检索器来保持与传统查询元素的向后兼容性。
- 结构化检索: 检索器提供了一种更结构化的方式来定义搜索操作。它们允许使用“检索器树”来描述搜索,这是一种分层结构,可以阐明操作的顺序和逻辑,使复杂的搜索更易于理解和管理。
- 可组合性和灵活性: 检索器支持灵活的组合,允许您构建流程并将不同的检索策略无缝集成到这些流程中。检索器使测试不同的检索策略组合变得容易。
- 复合操作: 检索器可以具有子检索器。这允许进行复杂的嵌套搜索,其中一个检索器的结果馈送到另一个检索器,从而支持可能涉及多个阶段或条件的复杂查询策略。
- 检索作为一等概念: 与传统查询(查询是更大的搜索 API 调用的一部分)不同,检索器被设计为可以组合或单独使用的独立实体。这支持一种更模块化、更灵活的搜索构建方法。
- 增强对文档评分和排序的控制: 检索器允许更明确地控制文档的评分和过滤方式。例如,您可以指定最低分数阈值,应用复杂的过滤器而不影响评分,并使用
terminate_after
等参数进行性能优化。
- 与现有 Elasticsearch 功能集成: 即使检索器可以代替现有的
_search
API 语法(如 query
和 knn
),它们也被设计为与分页 (search_after
) 和排序等功能无缝集成。它们还通过将所有叶子检索器的组合视为布尔查询中的 should
子句来保持与聚合操作的兼容性。
- 更清晰的关注点分离: 使用复合检索器时,只允许使用
query
元素,这强制了更清晰的关注点分离,并防止了由于过度嵌套或相互依赖的配置而可能产生的复杂性。
示例
以下示例演示了使用检索器如何简化 RRF 排序的查询组合。
GET example-index/_search
{
"retriever": {
"rrf": {
"retrievers": [
{
"standard": {
"query": {
"sparse_vector": {
"field": "vector.tokens",
"inference_id": "my-elser-endpoint",
"query": "What blue shoes are on sale?"
}
}
}
},
{
"standard": {
"query": {
"match": {
"text": "blue shoes sale"
}
}
}
}
]
}
}
}
此示例演示了如何将不同的检索策略组合到单个检索器流程中。
对比使用子搜索的 RRF 方法(自 8.16.0 起已弃用):
(展开示例)
有关如何使用检索器的更多示例,请参阅检索器示例。
词汇表
以下是一些重要术语:
- 检索流程 (Retrieval Pipeline): 定义生成排名靠前结果的整个检索和排序逻辑。
- 检索器树 (Retriever Tree): 定义检索器如何交互的分层结构。
- 第一阶段检索器 (First-stage Retriever): 返回一组初始候选文档。
- 复合检索器 (Compound Retriever): 基于一个或多个检索器构建,增强文档检索和排序逻辑。
- 组合器 (Combiners): 合并来自多个子检索器的排名靠前结果的复合检索器。
- 重排序器 (Rerankers): 特殊的复合检索器,对结果进行重新排序,并可能调整结果的数量,区分第一阶段和第二阶段重排序器。
检索器实战
Search Playground 使用检索器抽象概念构建 Elasticsearch 查询。它会自动检测索引中的字段和类型,并根据您的选择构建检索器树。
您可以使用 Playground 试验不同的检索器配置,并查看它们如何影响搜索结果。
有关更多信息,请参阅 Playground 文档。
API 参考
有关实现细节(包括重要的限制),请查看搜索 API 文档中的参考文档。
在这些动手示例中了解如何组合不同的检索器。