修复 Milvus 混合检索 RRF 分数与相似度阈值不兼容
· 阅读需 3 分钟
在 RAG 知识库项目中调试混合检索评分问题,以下是完整排查过程。
TL;DR
Milvus 混合检索的加权融合分数 = 0.7 * dense_score + 0.3 * sparse_score,理论最大值约 0.7。如果用 min_similarity=0.7 过滤,结果几乎全被剔除。解决方案:将阈值降到 0.3,或根据融合策略动态调整。
问题现象
混合检索返回空结果,即使数据库中明确存在相关文档:
# 调用混合检索
results = await milvus_service.hybrid_search(
collection_name="knowledge_base",
query_dense=dense_vector,
query_sparse=sparse_vector,
top_k=5,
min_similarity=0.7 # 问题根源
)
# 返回空数组 []
print(results) # {"documents": [[]], "metadatas": [[]], "distances": [[]]}
日志显示检索到了结果,但过滤后为空:
fused_results before filter: 10, scores: [0.52, 0.48, 0.45, ...]
min_similarity threshold: 0.7
fused_results after filter: 0, scores: []