HNSW:向量世界的高速公路

作者:杨帅      发布日期:2026.04.28

算法原理 · 向量搜索

理解
HNSW
向量世界的高速公路

深入剖析 Hierarchical Navigable Small World 算法—— 现代向量数据库的核心索引引擎,让百万级相似搜索在毫秒内完成。

📅 2025 ⏱ 8 min read 🏷 ANN · Graph · Vector DB
SCROLL

什么是近似最近邻搜索?

在向量数据库中,最核心的操作是找到与查询向量最相似的 k 个向量。 暴力遍历所有向量(精确搜索)的时间复杂度是 O(n·d),在百万规模的高维数据面前慢得令人痛苦。

因此,近似最近邻(ANN, Approximate Nearest Neighbor)算法应运而生: 用少量精度换取数量级的速度提升。HNSW 是目前工业界公认表现最好的 ANN 算法之一。

"HNSW 在 ann-benchmarks.com 上几乎横扫所有数据集,以极高的召回率和极低的延迟同时领先。"

小世界网络的灵感

1967 年,社会学家 Milgram 做了一个实验:让陌生人通过熟人链把信件传递给指定目标, 平均只需 6 步。这就是著名的"六度分隔"——世界比我们想象的小。

HNSW 把同样的思想应用到向量空间:在图中,任意两个节点之间通过少数几跳就能相连, 而层级结构则提供了"长途快线"与"本地慢车"的组合。

// HNSW 层级结构示意
Layer 2 Layer 1 Layer 0 A E B C E G A B C D E F G H 越高层节点越稀疏、连接越远 → 高速公路效果

搜索是如何进行的?

搜索过程可以用一个简单的比喻理解:乘坐高铁→地铁→步行 到达目的地。

🚄

第一步:顶层出发

从最高层的入口节点开始,节点稀疏,每一跳跨越很远的距离。

🧭

第二步:贪心靠近

在当前层,每次选择离目标最近的邻居前进,直到局部最优。

⬇️

第三步:下降一层

当前层无法再靠近时,下降到更密集的下一层,继续搜索。

🎯

第四步:底层精搜

在最底层(Layer 0)找到最终的近似最近邻,返回结果。

三个核心参数

理解并调优这三个参数,就能在速度、精度、内存之间找到最佳平衡点。

M
每个节点在各层的最大出边数。M 越大,图越密集,召回率越高,但内存占用和构建时间线性增长。典型值:16–64。
ef_construction
构建索引时的动态候选集大小。越大,索引质量越高,但构建越慢。典型值:100–500,通常设为 M 的 2–4 倍。
ef_search
查询时的候选集大小,可动态调整。增大可提高召回率,减小可降低延迟。通常 ≥ k(返回结果数)。
# Python 示例:使用 hnswlib 构建索引
          import hnswlib
          import numpy as np

          dim   = 128    # 向量维度
          count = 100_000

          # 初始化索引
          index = hnswlib.Index(space='cosine', dim=dim)
          index.init_index(
              max_elements=count,
              ef_construction=200,   # 构建质量
              M=32                    # 图稠密度
          )

          # 添加向量
          data = np.random.rand(count, dim).astype(np.float32)
          index.add_items(data)

          # 查询(可动态调整 ef)
          index.set_ef(64)
          labels, distances = index.knn_query(data[0], k=10)

为什么 HNSW 如此出色?

与其他 ANN 算法相比,HNSW 在召回率和延迟的 trade-off 上处于领先位置。

HNSW — 搜索复杂度 O(log n) 极快 ✦
IVF — 搜索复杂度 O(n/nlist) 较快
LSH — 搜索复杂度 O(n^ρ) 一般
HNSW — 召回率(Recall@10) 99%+ ✦
HNSW — 支持动态插入 ✓ 无需重建

哪里在用 HNSW?

从 RAG 到推荐系统,HNSW 已成为现代 AI 基础设施的隐形脊梁。 主流向量数据库都将其作为默认或核心索引选项。

🤖 RAG / LLM 知识库 🎵 音乐相似推荐 🖼 以图搜图 🛍 电商商品推荐 💊 药物分子相似搜索 🔍 语义文档检索 🎮 游戏 NPC 行为匹配 🧬 基因序列分析 👤 人脸识别 📧 垃圾邮件过滤
🗄

Milvus

开源向量数据库,HNSW 是其最常用的索引类型之一。

🔷

Qdrant

Rust 实现的高性能向量搜索,默认使用 HNSW。

🐘

pgvector

PostgreSQL 扩展,支持 HNSW 索引进行向量相似搜索。

🧊

Weaviate

云原生向量数据库,核心索引基于 HNSW 构建。

一句话总结

HNSW 用层级图模拟了小世界网络的快速导航特性—— 上层提供"高速公路"快速靠近目标区域,下层提供"本地街道"精细定位。 这个巧妙的设计让它在O(log n) 的时间复杂度内, 完成精度超过 99% 的近似最近邻搜索。

对于任何需要处理向量嵌入的系统——无论是 LLM、推荐引擎还是多模态搜索—— 理解 HNSW 的工作原理都是理解整个系统性能瓶颈和优化空间的关键一步。