候选合并去重
候选合并去重
def merge(candidates):
seen, merged = set(), []
for c in candidates:
key = c.meta.get("chunk_uid") or hash(c.text)
if key in seen:
continue
seen.add(key)
merged.append(c)
return merged
# 不同查询改写的结果也常一起合并:
# all_hits = merge(hits_original + hits_rewrite1 + hits_rewrite2)合并策略
| 策略 | 适用 |
|---|---|
| 按 uid 去重后交给重排 | 候选来自同一文档的不同路径 |
| RRF 融合排名 | 多路分数不可直接比较 |
| 按父文档聚合选代表块 | 小块密集命中同一长文 |
多路召回会把候选量放大数倍,检索与重排的耗时、费用都要按放大后估算。