Zvec Logo

多向量搜索

Zvec 支持多向量查询,允许你在单次搜索中组合不同的 Embedding。

当查询多个向量 Embedding 时,Zvec 会从每个向量空间中独立检索候选结果。
由于不同向量空间的相似度评分可能无法直接比较,因此需要一个**重排序器(Re-ranker)**来融合并重新排列结果,生成统一的、按相关性排序的列表。


前提条件

本指南假设:

  • 你已经打开了一个包含多个向量字段的 collection
  • 你已经熟悉基本的向量查询概念。如果不熟悉,请先阅读单向量搜索指南


执行多向量搜索

要运行多向量搜索,请将向量查询规范列表传递给 query() 方法,并通过 reranker 参数指定融合策略。

此示例查询 dense_embeddingsparse_embedding,并使用 WeightedReranker 来组合结果:

使用多个向量查询
import zvec

result = collection.query(  
    topk=5,  # 从每个向量 Embedding 中检索前 5 个候选结果
    vectors=[  # 向量查询列表 — 每个要搜索的 Embedding 空间一个
        zvec.VectorQuery(field_name="dense_embedding", vector=[0.1] * 768),           
        zvec.VectorQuery(field_name="sparse_embedding", vector={1: 0.1, 37: 0.43}),   
    ],
    reranker=zvec.WeightedReRanker(  
        topn=3,  # 重排序后返回前 3 个 Document
        metric=zvec.MetricType.IP,  # 用于解释原始评分的距离类型
        weights={  # 给 'dense_embedding' 分配更高的权重
            "dense_embedding": 1.2,
            "sparse_embedding": 1.0,
        },
    ),
)
print(result)

在多向量搜索中,topk 的含义与单向量查询不同:

  • topk(在 query() 中):控制在重排序之前从每个向量字段检索多少候选 Document。更大的 topk 为重排序器提供更多候选结果,可能提高最终质量但增加计算成本。
  • topn(在 ReRanker 中):控制评分融合和重排序之后返回多少最终 Document。这是你的最终结果集大小。

重排序策略

Zvec 提供不同的重排序策略来组合多个向量字段的评分。

重排序器WeightedReRankerRrfReRanker(倒数排名融合)
方法使用自定义权重组合归一化的相似度评分仅基于排名位置融合结果 — 不需要评分
排名 r 处的 RRF 评分为:RRF(r)=1k+r+1\text{RRF}(r) = \frac{1}{k + r + 1}
适用场景• 不同向量字段之间的评分大致可比
• 你知道每种 Embedding 类型的相对重要性
• 评分来自不同的度量或尺度
• 你偏好简单、稳健、无需调参的方法
参数weights:将向量名称映射到其相对重要性的字典
metric:用于评分归一化的相似度度量
rank_constantk):控制排名影响衰减的速度。更高的值会降低排名靠前的结果的主导地位。

目录