首页/AI/RAG 与向量库速查/Qdrant 稀疏向量与混合查询

Qdrant 稀疏向量与混合查询

Qdrant 支持同一集合内配置 dense 与 sparse 多向量:稀疏向量承载关键词/学习式稀疏表示,查询时用 prefetch 多路召回、fusion 融合(RRF 或 DBSF)。

RAG 与向量库速查AI更新于 2026-10-13

稀疏向量与混合查询

Qdrant 允许在同一集合里配置 dense 与 sparse 多路向量:稀疏向量承载关键词权重或学习式稀疏表示,稠密向量负责语义匹配。查询时用 prefetch 做多路召回,再用融合方式(RRF 或 DBSF)合并结果。它适合既要精确命中型号、错误码与术语,又需要一定语义泛化能力的场景。

基本信息

配置要求建集合时声明 dense 与 sparse 两路向量
查询方式prefetch 多路召回,query 指定融合方式
融合选项RRF 按名次融合,DBSF 按分数分布归一化
写入要求同时提供两路向量,缺一路只影响该路召回

典型使用场景

  • 技术文档检索:错误码与型号需要精确命中,概念解释需要语义匹配
  • 电商类目问答:商品名与规格靠关键词,使用问题靠语义
  • 混合检索试点:在已有稠密集合上补一路稀疏,改造成本低于换库
  • 关键词权重可解释:稀疏向量维度对应词项,便于分析命中原因
  • 替换纯 BM25:服务端融合省去自建关键词索引的维护成本

混合查询

混合查询
res = client.query_points(
    collection_name="kb",
    prefetch=[
        models.Prefetch(query=dense_vec, using="dense", limit=20),
        models.Prefetch(query=models.SparseVector(indices=[12, 70], values=[0.9, 0.4]),
                        using="sparse", limit=20),          # 稀疏向量:词项下标与权重
    ],
    query=models.FusionQuery(fusion=models.Fusion.RRF),     # 融合两路结果
    limit=10, with_payload=True,
)
# prefetch 的 limit 决定融合候选规模,过小会让融合无料可用

融合方式对比

方式依据特点
RRF名次倒数加权免标定、稳健,忽略分数差距
DBSF分数分布归一化后求和保留分数信息,需在评测集上调
只走 dense不做融合语义强,专有名词容易漏
只走 sparse不做融合精确匹配强,同义表达弱
稀疏字段需在集合配置中声明;写入时同时提供 dense 与 sparse 向量,缺一路只影响该路召回,不会导致整条记录写入失败。
稀疏向量的生成质量决定上限:用 BM25 类词权重与用学习式稀疏模型产出的向量,效果差别可能比融合方式更大,建议先固定生成方式再调融合,否则两个变量同时变化无法归因。
写入与查询要共用同一套分词与权重规则:入库时用的是哪种分词器、权重是否做归一化,查询侧必须保持一致,否则同一词项在两端的表示对不上,稀疏路召回会明显偏少。

易错点

  • 稀疏向量 indices 与 values 长度不一致,写入被拒绝
  • prefetch 的 limit 过小,融合阶段没有足够候选可排
  • 集合建好后才发现未声明稀疏字段,需要重建集合
  • 融合方式改了不做评测对比,检索质量变化无从判断

数据来源与参考

  • Qdrant 官方文档(Hybrid Queries / Sparse Vectors)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌