Skip to content

HNSW (Hierarchical Navigable Small World · 分层可导航小世界)

一句话

让向量检索从「遍历 100 万条」变成「跳 20 步就找到」。 Milvus 这么快,HNSW 是核心原因。

核心直觉

想象找「和苹果最像的水果」:

  • 暴力检索:把库里的每个水果(100 万个)都和苹果比一次 → 太慢
  • HNSW:先在一个「粗地图」上跳到大方向(水果区)→ 再在「细地图」上精准定位(红皮水果区)→ 在少数候选里找最像的

HNSW 就是构建这张分层跳表的数据结构——上层粗略、下层精细,越接近目标越慢下来看。

为什么重要

没有 HNSW,向量检索就是 O(n) 遍历——100 万条文档 = 100 万次距离计算。有了 HNSW,只需要 ~20 步就能找到近似最近邻(ANN)。这个差距是从「不可用」到「可用」的质变。

关键参数

参数含义调大效果
M每个节点的连接数精度↑ 内存↑
efConstruction建索引时的搜索宽度精度↑ 建索引慢
ef查询时的搜索宽度精度↑ 查询慢

小结

你不用手动调 HNSW 参数——Milvus 有默认值,大多数场景够用。但你需要知道:向量检索这么快,不是因为 Embedding 模型聪明,而是因为 HNSW 这个数据结构聪明。这是工程优化胜过算法优化的经典案例。

下一步

  • Embedding — HNSW 检索的是 Embedding 向量
  • Milvus — 使用 HNSW 的向量数据库