平衡尺度:利用权重使倒数排序融合 (RRF) 更加智能

作者:来自 Elastic Mridula Sivanandan

在 Elasticsearch 中探索加权倒数排序融合 (RRF),以及它如何通过实际示例工作。

亲自体验向量搜索,使用这个自定进度的 Search AI 实操学习。你现在可以开始免费云试用,或在本地机器上尝试 Elastic。

想象一下:你正在构建一个餐馆搜索,需要平衡位置相关性和菜系匹配。有些查询更关注 "pizza near me, - 离我近的 pizza",而另一些则优先考虑"Italian restaurants that serve cacio e pepe - 提供 cacio e pepe 的意大利餐馆" 或 "highly reviewed Italian restaurants - 评价很高的意大利餐馆"。直到现在,Elasticsearch 的倒数排序融合 (RRF) 一直把所有检索器视为平等,但你的搜索策略不应该如此。

这就是加权 RRF 的用武之地。它不再让每个检索器在搜索结果中拥有同样的权重,而是允许你微调它们的影响,从而创造更细致和更有效的搜索体验。在这篇博客中,我们将探讨加权 RRF 的必要性,并演示如何在不同的搜索场景中使用它。

挑战:一刀切并不适用

RRF 非常适合将不同的检索策略 ------ 比如关键词、语义和向量搜索 ------ 组合成一个单一的排序结果集。但如果对所有检索器一视同仁,当某些检索方法对特定查询类型更有价值时,就可能限制搜索质量。

想象一个餐厅搜索,不同的查询类型需要不同的排序策略:

  • 以位置为中心的查询,比如 "pizza near me",需要以城市、社区或距离等基于位置的信号在排序中占主导。
  • 以菜品为中心的查询,比如 "Italian restaurants that serve cacio e pepe",应当优先考虑菜单项匹配和菜系类型,而不是距离远近。
  • 以质量为中心的查询,比如 "highly reviewed Italian restaurants",应当把评分和评论置于所有其他因素之上。

在加权 RRF 出现之前,平衡这些信号的标准方法是分数的线性组合(分配固定权重并求和)。虽然功能强大,但这种方式往往需要通过多次搜索、自定义打分函数或人工后处理等变通手段,而这些都很难维护和有效调整。

加权 RRF 消除了这些痛点,它提供了一个统一的框架,让每个检索器都有自己的权重,并由 RRF 算法自动处理排序融合。

解决方案:通过加权实现精确

加权 RRF 提供了一种简单但强大的方式,可以为不同的检索器分配不同的重要性等级。每个检索器现在都接受一个权重参数,用来影响它对最终 RRF 分数的贡献。

这对你的搜索意味着什么

加权 RRF 给了你更大的灵活性,可以创建更智能、更贴合需求的搜索体验。

更智能的相关性调优:不再是一刀切的排序。对于概念性查询("find restaurants with cozy atmosphere"),可以给语义搜索检索器更高的权重;而对于具体词语("Margherita pizza"),则提升关键词匹配的权重。

实践中的运作方式

假设你正在构建餐厅搜索。以下是加权 RRF 如何在不同搜索场景下改变查询策略的示例:

场景 1:"Pizza near me" ------ 以位置为中心的搜索

一个用户在手机上搜索 "pizza near me"。在这种情况下,距离最重要。加权 RRF 让我们能够给予基于位置的信号(城市、社区、邮政编码)更多的影响力,而不是关键词 "pizza" 的匹配。

下面是该查询在 JSON 中可能的样子:

bash 复制代码
`

1.  {
2.    "retriever": {
3.      "rrf": {
4.        "retrievers": [
5.          {
6.            "retriever": {
7.              "standard": {
8.                "query": {
9.                  "multi_match": {
10.                    "query": "Vienna",
11.                    "fields": ["city", "neighborhood", "postal_code"]
12.                  }
13.                }
14.              }
15.            },
16.            "weight": 0.8
17.          },
18.          {
19.            "retriever": {
20.              "standard": {
21.                "query": {
22.                  "match": {
23.                    "menu_items": "pizza"
24.                  }
25.                }
26.              }
27.            },
28.            "weight": 0.2
29.          }
30.        ]
31.      }
32.    }
33.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

这种加权方式会偏向附近的餐厅,即使菜单文本匹配较弱。

场景 2:"Italian restaurants that serve cacio e pepe" ------ 以菜系和菜品为中心的搜索

在这里,用户想要寻找特定的菜系和菜品。加权 RRF 强调菜系和菜单匹配,同时仍然允许距离作为次要因素发挥作用。

下面是该查询在 JSON 中可能的样子:

markdown 复制代码
`

1.  {
2.    "retriever": {
3.      "rrf": {
4.        "retrievers": [
5.          {
6.            "retriever": {
7.              "standard": {
8.                "query": {
9.                  "match": {
10.                    "cuisine_type": "Italian"
11.                  }
12.                }
13.              }
14.            },
15.            "weight": 0.4
16.          },
17.          {
18.            "retriever": {
19.              "standard": {
20.                "query": {
21.                  "match": {
22.                    "menu_items": "cacio e pepe"
23.                  }
24.                }
25.              }
26.            },
27.            "weight": 0.6
28.          }
29.        ]
30.      }
31.    }
32.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

这种加权方式会提升那些明确提到该菜品和菜系的餐厅,即使它们距离稍远。

场景 3:"Highly reviewed Italian restaurants" ------ 以质量和菜系为中心的搜索

当质量是首要考虑时,评分占据最重要的权重。加权 RRF 允许评分阈值引导排序,同时将菜系类型作为辅助因素。

下面是该查询在 JSON 中可能的样子:

markdown 复制代码
`

1.  {
2.    "retriever": {
3.      "rrf": {
4.        "retrievers": [
5.          {
6.            "retriever": {
7.              "standard": {
8.                "query": {
9.                  "range": {
10.                    "rating": {"gte": 4.5}
11.                  }
12.                }
13.              }
14.            },
15.            "weight": 0.7
16.          },
17.          {
18.            "retriever": {
19.              "standard": {
20.                "query": {
21.                  "match": {
22.                    "cuisine_type": "Italian"
23.                  }
24.                }
25.              }
26.            },
27.            "weight": 0.3
28.          }
29.        ]
30.      }
31.    }
32.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

这种加权方式会提升高评分的 Italian 餐厅,在保持菜系相关性的同时,让评分起主导作用。

加权 RRF 通过为每个检索器设置权重,把这些偏好直接编码进排序中,因此最终的顺序能够反映每个查询真正重要的因素。

底层原理

在计算最终分数时,标准的 RRF 公式被加上了权重:

示例:rank_constant = 60。每个检索器的贡献为:weight × 1 / (rank + rank_constant)。权重越高,影响力越大;排序从 1 开始。

关键技术特性包括:

  • 权重可选:当你需要更精细的控制时,可以选择为每个检索器单独设置权重;如果只有部分检索器需要加权,也可以使用默认权重。
  • 输入校验:权重必须是非负数。

想要进行高级定制和混合评分(包括归一化),请参阅 Linear retriever www.elastic.co/docs/refere...

接下来?

加权 RRF 将 RRF 扩展到生产场景中,这些场景需要比标准 RRF 更多的控制。那些需要对搜索相关性进行细粒度控制的团队,现在可以使用 RRF,而不必再构建自定义解决方案。无论是餐厅搜索中平衡位置和菜系,电商搜索中平衡品牌和类别,还是其他复杂的排序场景,加权 RRF 都能提供你所需的精确度。

我们迫不及待想看到你如何使用加权 RRF 来打造更智能、更灵活的搜索体验。祝搜索愉快!

准备深入了解?请查阅我们官方文档中的 Reciprocal Rank Fusion 和 Retriever APIs。

原文:www.elastic.co/search-labs...

相关推荐
Elasticsearch2 小时前
让数据跨越边界发挥价值:警务工作的下一项挑战
elasticsearch
腾讯云大数据17 小时前
从辅助驾驶到自主闭环:腾讯云ES的Agentic AIOps实践
elasticsearch·云计算·腾讯云
坐吃山猪18 小时前
ES08-ES使用IK分词器
大数据·elasticsearch·搜索引擎
KING-WU51221 小时前
Git 版本控制器实战指南
大数据·git·elasticsearch
SelectDB技术团队21 小时前
日志场景 Elasticsearch 替换实操:建表、索引、写入链路与查询改写的完整参数
大数据·数据库·数据仓库·elasticsearch·全文检索·日志分析·apache doris
打工仔折腾 AI1 天前
Spring AI + Qwen 周报生成实战:从原始日志到人工确认卡
人工智能·后端·python·spring·elasticsearch·ai agent 实战
深蓝电商API1 天前
亿级数据的存储选型:MongoDB/ES/ClickHouse横评
爬虫·clickhouse·mongodb·elasticsearch
Elasticsearch1 天前
弥合人工智能差距:新一代知识获取方式如何助力政府实现使命目标
elasticsearch
Elasticsearch1 天前
教程:监控 Java 应用
elasticsearch
Elastic 中国社区官方博客1 天前
一条 ES|QL 查询,涵盖365天的审计日志:在热数据和可搜索快照上执行相同的搜索
大数据·运维·服务器·elasticsearch·搜索引擎·全文检索