倒数排名融合 (RRF) 是一种算法,可评估多个以前的排名结果中的搜索分数以生成统一的结果集。 在 Azure AI 搜索中,每当并行执行两个或更多个查询时,都会使用 RRF。 每个查询都会生成一个排名结果集,RRF 可用于将排名合并和同质化为单个结果集,在查询响应中返回。 始终使用 RRF 的示例方案包括混合搜索和并行执行的多个矢量查询。
RRF 基于倒数排名的概念,即搜索结果列表中第一个相关文档的排名的倒数。该方法的目标是考虑项目在原始排名中的位置,并赋予在多个列表中排名较高的项目更高的重要性。 这有助于提高最终排名的整体质量和可靠性,使其对融合多个有序搜索结果的任务更加有用。
RRF 的工作方式是获取来自多种方法的搜索结果,为结果中的每个文档分配一个倒数排名分数,然后将这些分数结合起来创建一个新的排名。 其概念是,在多个搜索方法中出现在顶部位置的文档很可能相关度更高,因此应在合并结果中排名较高。
下面是 RRF 过程的简要说明:
从并行执行的多个查询中获取排名的搜索结果。
为每个排名列表中的结果分配倒数排名分数。 RRF 为每个结果集中的每个匹配项生成新的 。 对于搜索结果中的每个文档,引擎基于其在列表中的位置分配倒数排名分数。 分数按 计算,其中 是文档在列表中的位置, 是一个常量,经实验证明,如果将它设置为 60 这样较小的值,则效果最佳。 请注意,这个 值是 RRF 算法中的常量,与控制最近的邻域数的 完全不同。
合并分数。 对于每个文档,引擎将从每个搜索系统中获得的倒数排名分数相加,为每个文档生成合并分数。
引擎根据合并分数对文档进行排名和排序。 得到的列表即为融合排名。
只有索引中标记为 或查询中标记为 的字段才用于评分。 搜索结果中仅返回标记为 的字段或在查询中的 中指定的字段,还会返回它们的搜索分数。
每当有多个查询执行时,都会使用 RRF。 下面的示例演示了出现并行查询执行时的查询模式:
一个全文查询,加上一个矢量查询(简单的混合场景),等于两个查询执行。
一个全文查询,加上一个面向两个矢量字段的矢量查询,等于三个查询执行。
一个全文查询,加上两个面向五个矢量字段的矢量查询,等于 11 个查询执行
每次对结果排名时, 属性都包含用于对结果进行排序的值。 分数是由每种方法的排名算法生成的。 每种算法都有自己的范围和幅度。
下图标识了根据每个相关性排名算法的每个匹配项、算法和分数范围返回的评分属性。
搜索方法
参数
评分算法
范围
全文搜索
BM25 算法
没有上限。
矢量搜索
HNSW 算法,使用 HNSW 配置中指定的相似性指标。
0.333 – 1.00(余弦),0 到 1(欧几里德和点积)。
混合搜索
RRF 算法
上限受融合的查询数限制,每个查询对 RRF 分数的贡献最大约为 1。 例如,合并三个查询比只合并两个搜索结果生成的 RRF 分数更高。
语义排名
语义排名
0.00 – 4.00
语义排序在 RRF 结果合并后发生。 它的分数 () 始终在查询响应中单独报告。 语义排序器可以对全文和混合搜索结果进行重新排名,前提是这些结果包括具有语义丰富的内容的字段。 如果搜索文档包含具有语义相关内容的文本字段,则它可以重新排序纯矢量查询。
使用 2025-09-01-preview,可以分解搜索分数以查看其子分数。
对于矢量查询,此信息可以帮助确定矢量加权或设置最小阈值的适当值。
获取子分数:
使用最新预览版搜索文档 REST API 或某个提供该功能的 Azure SDK beta 版包。
修改查询请求,将新的 参数集添加到 、(如果使用语义排序器)或 。
下面是一个在调试模式下返回子分数的混合查询示例:
使用 2025-07-01 及更高版本的预览 API 版本,可以对矢量查询进行加权,以增加或减少它们在混合查询中的重要性。
回想一下,当计算特定文档的 RRF 时,搜索引擎会查看显示文档的每个结果集中文档的排名。 假设文档显示在三个单独的搜索结果中,这些结果来自两个矢量查询和一个文本 BM25 排名查询。 文档的位置因每个结果而异。
已找到匹配项
结果中的位置
@search.score
权重乘数
@search.score(加权)
矢量结果一
位置 1
0.55
0.5
0.775
矢量结果二
位置 5
0.
2.0
1.228
BM25 结果
位置 10
0.63
NA
0.63
每个结果集中的文档位置对应于初始分数,这些分数相加得到该文档最终的 RRF 分数。
如果添加了矢量加权,则初始分数会受到加权乘数的影响,它会增加或减少分数。 默认值为 1.0,这意味着没有权重,初始分数按原样用于 RRF 评分。 但是,如果添加了 0.5 的权重,则分数会降低,并且结果在组合排名中的重要性会降低。 相反,如果添加了 2.0 的权重,则分数会成为整体 RRF 分数中的较大因素。
在此示例中,@search.score(加权)值被传递给了 RRF 排名模型。
默认情况下,如果你不使用分页,搜索引擎会返回全文搜索的前 50 个最高排名匹配项,以及矢量搜索的最相似的 匹配项。 在混合查询中, 决定了响应中的结果数。 默认情况下,会返回统一结果集的前 50 个最高排名匹配项。
通常,搜索引擎会比 和 查找到更多结果。 要返回更多结果,请使用分页参数 、 和 。 分页是确定每个逻辑页面上的结果数并浏览完整有效负载的方式。 可以将 设置为较大的值(默认值为 1,000),以从混合查询的文本端返回更多结果。
默认情况下,全文搜索的上限为 1,000 个匹配项(请参阅 API 响应限制)。 找到 1,000 个匹配项后,搜索引擎便不再进行查找。
有关详细信息,请参阅如何处理搜索结果。
下图演示了一个混合查询,它调用关键字和矢量搜索,通过计分概要文件进行提升,并进行语义排序。
生成之前的工作流的查询可能如以下所示:
详细了解混合搜索
详细了解矢量搜索