
分片結(jié)果合并前先問每個分片返回的是什么。若它返回同一距離定義下的精確Top-K合并不是近似問題若分片內(nèi)部已經(jīng)漏召回協(xié)調(diào)器排得再認真也只能處理手里那批候選。原理示意非真實系統(tǒng)截圖或性能測量。精確Top-K為什么夠用固定距離升序、文檔ID升序作為全序。假設(shè)一個全局前K的點在所屬分片排到K名之后那么該分片至少有K個點排在它前面。這K個點在全局也都排在它前面與“全局前K”矛盾。所以每片取精確Top-K再合并足夠得到全局Top-K。成立條件不能省分片覆蓋完整、度量一致、ID與并列順序一致。余弦相似度直接與平方L2混排或者每片使用不同量化標(biāo)尺都不符合前提。內(nèi)圖中的四個距離是教學(xué)輸入不是一次檢索測量。from heapq import nsmallest def exact_top(shards, k): if k 0: raise ValueError(negative k) local [nsmallest(k, rows) for rows in shards] return nsmallest(k, (x for rows in local for x in rows)) shards [[(1,A),(4,D)],[(2,B),(3,C)]] assert exact_top(shards, 2) [(1,A),(2,B)] assert exact_top(shards, 0) [] skewed [[(i,str(i)) for i in range(20)],[(100,Z)]] assert exact_top(skewed, 5) nsmallest(5, sum(skewed, [])) print(PASS exact merge, skewed shards and k0)ANN損失要記在哪一層HNSW、CAGRA等近似搜索可能在局部搜索階段就沒走到某個真正近鄰。超額召回與增大探索深度可以改變這個概率但不是數(shù)學(xué)上的無損保證。cuVS CAGRA文檔也把它定義為近似圖檢索精確結(jié)果需要精確基線。重打分能糾正“已召回候選”的近似距離無法補出從未進入候選集的點。不能把“對候選精確排序”寫成“全庫精確召回”。缺片是另一類問題。一個分片不可用從健康分片多拿幾倍候選不會把故障片上的文檔變出來。此時應(yīng)返回覆蓋范圍或missing_shards由業(yè)務(wù)決定是否接受不完整結(jié)果。該怎樣驗證一個分布式實現(xiàn)先用Faiss所述的統(tǒng)一度量建立全庫精確金標(biāo)再分別統(tǒng)計局部ANN漏召回、量化重排變化、超時缺片。網(wǎng)絡(luò)字節(jié)、延遲與Recall應(yīng)在相同數(shù)據(jù)和查詢分布下比較。本文Python示例本地通過僅驗證精確合并命題的幾個有限例子。沒有運行HNSW集群沒有“召回損失5%—15%”或“1ms合并百萬候選”的成績。要給“無損”蓋章先看前提不看協(xié)調(diào)器名字里有沒有Merge。本地示例使用Python 3.9.6保存完整Python塊為demo.py后可用python3 demo.py復(fù)現(xiàn)。示例只驗證文中限定的邏輯不代表已接入數(shù)據(jù)庫或模型。