You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Milvus hybrid_search未指定重排序器时返回相同分数?

问题:Milvus 2.6 hybrid_search无重排序器时返回分数全部相同

我正在使用Zilliz Cloud上的Milvus 2.6,通过Python客户端执行混合搜索(hybrid_search)。当调用该接口未提供重排序器(传入ranker=None)时,所有返回结果的分数均相同(如0.01639344…),而非各自的相似度分数。简化代码片段如下:

res3 = client.hybrid_search(
    collection_name=COLLECTION_NAME,
    reqs=[request_1, request_2],
    ranker=None,
    output_fields=["content"],
    limit=2
)

我原本预期未指定重排序器时,混合搜索仍会返回基于各搜索组件的有效分数。请问:

  1. Milvus hybrid_search在未使用重排序器时返回所有结果分数相同是否为预期行为?
  2. 若不是,应如何调用该接口以获取正确的单结果分数且不使用重排序器?

解答
  1. 这是预期行为。当hybrid_search不指定重排序器(ranker=None)时,Milvus会采用默认的简单合并策略,此时返回的分数并非各搜索组件的原始相似度分数,而是统一的占位数值——因为没有重排序器来聚合或保留各子查询的原始分数,所以所有结果的分数会显示为同一个固定值。

  2. 若要获取各搜索组件的原始相似度分数且不使用重排序器,你需要拆分混合搜索为多个独立的单查询,分别调用search接口,再自行合并结果。示例代码如下:

# 执行第一个向量搜索
res1 = client.search(
    collection_name=COLLECTION_NAME,
    data=[embedding_1],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    output_fields=["content"],
    limit=2
)

# 执行第二个查询(示例为另一向量查询,也可替换为布尔查询等)
res2 = client.search(
    collection_name=COLLECTION_NAME,
    data=[embedding_2],
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    output_fields=["content"],
    limit=2
)

# 自行合并结果集(可根据业务需求去重、按分数排序等)
combined_results = res1[0] + res2[0]

通过这种方式,每个search接口返回的结果都会保留各自的原始相似度分数,你可以根据实际需求处理合并逻辑,比如去重、按分数排序等。


内容的提问来源于stack exchange,提问作者Schiffer Marget

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 17:42:09