混合搜索(RRF融合排序)

最近更新时间:2026-03-02 16:22:42

我的收藏
在混合检索的过程中,文本检索与向量检索的评分机制大不相同,RRF(Reciprocal Rank Fusion)融合搜索的基本思想是对每个系统的排名结果赋予一个权重,这个权重是其排名的倒数。具体来说,对于每个系统的排名列表中的每个项目,RRF 算法会计算一个分数,该分数是该项目在每个列表中排名的倒数之和。然后,所有项目根据这个分数进行重新排序,以生成最终的融合排名列表。RRF 内置于ES 中,无需外部模型服务,较为轻量,可作为粗排环节的融合排序算法之一。

写法一:retriever 方式(Elastic 8.16正式发布)

retriever 方式详情请参见Retrievers
GET book-index/_search
{
"retriever": {
"rrf": {
"retrievers": [
{
"retriever": {
"knn": {
"field": "title_vector",
"query_vector": [0.1, 0.2, 0.3 ...],
"k": 10,
"num_candidates": 100
}
},
"weight": 0.8
},
{
"retriever": {
"standard": {
"query": {
"match": {
"title_text": "人类"
}
}
}
},
"weight": 0.2
}
],
"rank_window_size": 50,
"rank_constant": 20
}
}
}

写法二:传统写法(此方式已弃用,不推荐)

GET book-index/_search
{
"knn":{
"field":"content_vector",
"query_vector": [0.5, 0.6, 0.7 ...],
"k":10,
"num_candidates": 100
},
"query":{
"match":{
"title_text":{
"query":"人类"
}
}
},
"rank":{
"rrf":{
"rank_window_size":50,
"rank_constant":20
}
},
"size": 10
}

参数说明:
rank_window_size:从每个查询中取多少结果参与融合,默认值100
rank_constant:控制排名的常数,值越小排名影响越大,默认值60
RRF的计算公式如下: