许多搜索系统构建于多阶段检索流水线之上。
早期阶段使用廉价、快速的算法来查找广泛的可能匹配项。
后期阶段使用更强大的模型(通常是基于机器学习的)对文档进行重新排序。这一步骤称为重排。由于资源密集型模型仅应用于预过滤结果的较小子集,因此这种方法可以返回更相关的结果,同时仍然优化搜索性能和计算成本。
Elasticsearch 支持各种排序和重排技术,以优化搜索相关性和性能。
两阶段检索流水线
初始检索
全文搜索:BM25 评分
Elasticsearch 基于词频和逆文档频率对文档进行排序,并根据文档长度进行调整。BM25 是 Elasticsearch 中默认的统计评分算法。
向量搜索:相似度评分
向量搜索涉及将数据转换为密集或稀疏向量嵌入以捕获语义,并计算查询向量的相似度得分。使用 semantic_text
字段存储向量以进行自动推断和向量化,或者在需要更多地控制底层嵌入模型时使用 dense_vector
和 sparse_vector
字段。使用语义查询、knn 查询或 sparse_vector
查询查询向量字段以计算相似度得分。有关更多信息,请参阅语义搜索。
混合技术
混合搜索技术结合了全文搜索和向量搜索流水线的结果。Elasticsearch 支持使用倒数排名融合 (RRF) 算法结合词汇匹配 (BM25) 和向量搜索得分。
重排
当使用以下高级重排流水线时,第一阶段检索机制有效地生成一组候选项。这些候选项被输送到重排器以执行计算成本更高的重排任务。
语义重排
语义重排使用机器学习模型根据搜索结果与查询的语义相似性对它们进行重新排序。模型可以直接托管在 Elasticsearch 集群中,或者可以使用推理端点调用第三方服务提供的模型。语义重排对现有的全文搜索索引启用开箱即用的语义搜索功能。
学习排序 (LTR)
学习排序适用于高级用户。学习排序涉及训练机器学习模型,以构建随时间更新的搜索体验排序函数。LTR 最适合于您拥有充足的训练数据并且需要高度定制的相关性调整的情况。