在浏览器里跑通向量数据库的两个核心算法:ANN 图索引的贪心搜索(模块 A)与混合检索的 RRF 融合(模块 B)。全部本地计算,零网络依赖。
500 个点 = 一份 2D「向量库」(高维向量投影成平面便于观察)。底层连了一张近邻图(NSW,每点 8 近邻),模拟 Milvus 的 HNSW 索引。点击画布任一处设查询点,分别执行:暴力全扫(逐一计算距离,Ground Truth)与图索引搜索(beam search 沿边贪心扩展,只算访问到的点)。看图搜索用多少访问量换多少召回。
点击画布任意位置开始。
这就是 ANN 的本质交易:用可容忍的召回损失换数量级的计算量下降。左下的 ef 滑杆就是 Milvus HNSW 的同款调参——ef 越大访问越多、召回越高。查询点落在簇间空地时贪心可能掉沟里(recall 骤降),调大 ef 就能爬出来——这正是近似索引「召回换速度」的直观教材。
同一查询走了两路:Dense 路按语义相似排序,Sparse 路按关键词匹配(BM25)排序。Milvus 用 RRF(Reciprocal Rank Fusion)融合两路:score(d) = Σ wᵢ / (k + rankᵢ(d))。拖动滑块,实时看融合排名怎么变——调大 k 排名更「平权」,调权重则偏向某一路。
语义检索抓「意思相近」,关键词检索抓「精确命中」。两路都排前的文档融合后必然登顶——这正是 Milvus 把 BM25 / SPLADE 与 embedding 存进同一个 collection 的原因:融合发生在内核,而不是应用层两次查询手工拼。
| # | 文档 | Dense 路 | Sparse 路 | RRF 分 |
|---|