摘要:
混合搜索通过多模融合架构,支持单SQL处理结构化与非结构化数据混合查询。其核心流程分两阶段:粗排利用ANN、标量过滤和全文检索快速筛选候选集,通过RRF和归一化融合结果;精排则采用精确算法和复杂模型对候选结果精细化打分。OceanBase在VectorDB Bench中性能领先,以低成本实现高精度召回,并通过内核级优化提升混合查询效率。
背景
但在OceanBase 社区的实战营课程发布之后,有很多的社区用户在各个课程交流群中都提出了和混合搜索相关的问题,其中有比较多的问题都属于一些和混合搜索相关的基础概念,例如:混合搜索的流程是什么、“粗排”、“精排” 阶段分别是在干什么等等。
所以今天更新一篇非常简短的混合搜索基础概念学习笔记,作为 OceanBase 社区实战营第三季活动[1]的一个番外篇。
什么是混合搜索?
混合搜索目前已经成为 AI 时代数据库的刚需,DBA 必须都要了解。
为什么敢这么说?那就简单以一个最常见的知识库场景为例:
1. 在生产环境中使用数据库,往往都会考虑权限问题。权限问题主要的解法,就是把文档表、员工权限表以及各种各样的表去做 Join。我目前几乎没有看到过有用户和业务使用很 “纯粹” 的向量检索,一般都会有标量 & 向量混合搜索。这个标量,靠的就是传统数据库的检索能力。
2. 为了让检索更准确,对于 RAG 方案,目前业界比较共识的方案是:全文 + 向量混合搜索。未来,没有全文检索能力的数据库厂商,很难满足 RAG 方面的需求。
3. 其他类似于 GraphRag 的方案,在学术界以及工业界也比较活跃。所以,向量 + 图混合搜索的需求,也变的越来越常见。
那什么是混合搜索?与其给出定义,不如直接举个例子来的方便。
在上图的这个提问中:
距离五百米以内,是基于空间位置(GIS)的查询。
人均消费 25 元,评价 4.5 分以上,是基于传统标量的查询。
不用排队,是基于用户对店铺的评价,基于向量的语意检索。
这里直接借用 OceanBase 官网的一张图,来为大家展示一下数据库支持混合搜索之后,会有哪些优势。
从上图中可以看出:混合搜索,相比多组件分别检索(向量 / 标量 / 全文)然后再归并的优势,大概就是:
基于多模融合的一体化架构,无需引入额外组件,简化了 AI 技术栈,降低了运维复杂度。
支持通过一条 SQL 语句同时处理结构化、半结构化和非结构化数据的混合查询,简化了应用的开发流程。
数据库内核中的优化器感知到更多信息,因此可以提供更优的执行计划,提高了查询效率。
混合搜索的流程是什么?
一图胜千言。
下面这张图是借用 PowerMem 开源项目[2]中的一张和混合搜索相关的流程图,先看看你能看懂多少?
在上面这张图里,实战营课程中被提出最多的问题,就是 “粗排” 和 “精排” 阶段是在干什么?所以这篇文章的重点,就是补充解释一下之前遗漏的这些基础概念。
粗排阶段(召回 + 初筛阶段)
核心逻辑:以“速度”为优先级,快速从全量数据中筛选出「潜在相关」的候选集,尽可能排除明显不相关的内容,为后续精排减负。粗排主要逻辑就是通过向量 / 标量 / 全文几个维度粗过滤,然后进行一次各个维度粗过滤的结果融合。
这一部分主要为大家介绍粗排结果融合中涉及的两个概念 —— RRF(Reciprocal Rank Fusion) 和归一化(Normalization)。这两个专有名词听起来挺洋气,实际都非常简单,继续往下看一个例子就能搞明白。
1. 向量检索的粗排
向量相似性搜索(如 Embedding 匹配)若直接计算全量向量的相似度(如余弦相似度),时间复杂度是 O(n) (全量遍历),对大规模数据完全不可行。
因此粗排会用近似最近邻(ANN)算法(如 HNSW、IVF、PQ 等索引结构):
通过“空间分块、分层索引”等方式,把向量空间“剪枝”,快速定位可能的近邻向量(牺牲少量精度换速度)。
输出 Top K 个候选向量(比如从百万级数据中快速筛出 1000 个候选)。
2. 标量过滤的粗排
标量是数值型字段(如价格、时间、销量等),粗排阶段用范围过滤 + 索引加速:
用 WHERE price BETWEEN 100 AND 500 这类条件,快速过滤不满足数值约束的文档,直接缩小数据规模。
特点:过滤逻辑“硬”(不满足则直接排除),执行速度极快(依赖数据库索引)。
3. 全文检索的粗排
全文搜索(如关键词匹配)的粗排依赖倒排索引:
倒排索引记录了“关键词→包含该词的文档 ID 列表”,能快速匹配用户输入的关键词(如 “笔记本 轻薄”),筛出包含关键词的文档集合。
这一步是“关键词存在性匹配”,不做复杂语义分析(比如不计算 BM25,只确保关键词出现)。
4. 粗排结果融合
混合搜索中,粗排会同时结合向量、标量、全文的初筛条件,通过 “交集 / 并集” 缩小候选集。
粗排结果融合常见的方法就是 RRF(Reciprocal Rank Fusion) 和归一化(Normalization)。
RRF(倒数排名融合)
一句话理解 RRF:“谁在多个排名里都排得靠前,谁就是真正的热门。”
排名越靠前的结果,贡献的分数越高,且采用“倒数”形式,强调高排名项。公式如下:
举个例子,假设我们用两种搜索方式召回 “如何学习 seekdb”,并对召回的 4 个技术文档进行排序
即使 A 文档在向量搜索中排名第一,但 B 文档在向量和全文中全都排在前两名,所以通过 RRF 算出的最终综合得分更高。
归一化
将不同来源的评分,转换到统一尺度(通常是 [0, 1]),以便更加公平的比较和融合排名结果。
最常用的 Min-Max 归一化公式如下:
为什么需要归一化?因为不同召回方式的得分范围可能完全不同。
如果那归一化之前的得分直接相加,显然向量相似度的结果对最终排名几乎没有任何影响。
这个比较好理解,就不举例子了。
精排阶段
这个阶段,就是对粗排筛选出的少量候选结果,通过大模型来进行精细化打分与排序,确保最终返回结果最相关、最符合业务需求。在 RAG、搜索引擎、推荐系统中加入 rerank 精排,可以显著提升检索的准确率。
精排阶段主要会使用复杂模型,让排序算法升级(让排序更精准)。
召回 / 粗排时常用 “近似、轻量” 的方法(如 ANN 向量检索、简单规则),rerank 阶段则会用更复杂的模型 / 算法修正误差:
向量检索:
粗排会用 ANN(近似近邻)
rerank 会用精确余弦相似度重新计算,修正近似误差。
全文检索:
粗排会用 “关键词存在性匹配”
rerank 会用 BM25 / 预训练模型(如 BERT) 计算文本语义匹配度,提升文本相关性。
其他
rerank 阶段,往往还会用更加复杂的排序大模型(如 LambdaMART、DNN),自动学习多特征的权重,输出更精准的排序。
除此以外,精排阶段还会注入业务规则,让结果更符合业务目标。例如在电商搜索中,粗排阶段只会聚焦 “相关性”,而 rerank 时会加入 “推广商品加权”、“新品标加权”、“高毛利商品倾斜” 等特殊规则。
rerank 是混合搜索流程的 “最后一公里”,通过多特征融合、复杂模型、业务规则,将“召回/粗排的候选集”转化为“用户看到的最终结果”。
最后一句话总结
粗排 + 精排
= 快而不准的多渠道召回 + 慢而准的 rerank
= 高效又高质的混合搜索。
Oceanbase 数据库
OceanBase 向量数据库的几点优势
性能好 & 召回精度高:VectorDB Bench,比其它主流的向量数据库性能都好。
成本低:在同等条件下,成本业界最低。
效率更高:AI 负载需要的数据库能力,OceanBase[3] / seekdb[4] 向量数据库都能在一个集群支持。
更快:数据库混合查询,内核级别优化,性能比多个数据库的方案优数倍。
更易用:开发接口统一(开发优)、技术栈统一(架构优)、运维管控统一(运维优)。
其他:
分布式,横向可扩展。
金融级别高可用方案。
工具体系:端到端 迁移 / 开发/ 运维监控 & 诊断。
强事务能力:既有事务能力,性能也在 TPCC 榜单榜上有名。
还有这篇文章里的 “混合搜索”。
……
参考资料
[1]
OceanBase 社区实战营第三季活动: ask.oceanbase.com/c/training-…
[2]
PowerMem 开源项目: github.com/oceanbase/p…
[3]
OceanBase: github.com/oceanbase/o…
[4]
seekdb: github.com/oceanbase/s…