一句话定义
HNSW(Hierarchical Navigable Small World,分层可导航小世界)是一种近似最近邻搜索(Approximate Nearest Neighbor, ANN)索引算法:它把向量组织成一张多层图,查询时像先走高速、再走小路一样快速逼近目标,从而在百万级甚至更大的向量集合上做到毫秒级召回。
它解决什么问题
向量检索的基本动作是:给一个查询向量,找出库里最相似的若干条。最笨的办法是跟每个向量都算一遍距离(暴力检索),结果准确,但数据量一上来就扛不住。HNSW 的思路是提前建好一张“路网”,让查询不必碰所有数据。
多层图是怎么走的
图里的每个向量是一个节点,节点之间的边表示“两者比较近”。搜索从最上层的入口点出发,每一步都往离查询更近的邻居跳,走到局部最优就下沉到下一层继续精修,最底层给出候选结果。
分层的关键在于疏密不同:上层节点稀疏、边长,像城市之间的高速公路,负责快速跨越大范围;越往下节点越密、边越短,像街区小路,负责精确定位。一个节点出现在哪几层是按概率决定的,越往上越少。这正是“小世界”网络的特点:任意两点之间只需要很少几跳。
建索引时,新向量也从上层往下找位置,再按规则挑选若干邻居连边。因为跳数随层数增长,搜索代价大致是对数量级,而不是随数据量线性增长——这就是它能“毫秒级”的原因。
和相邻概念的区别
| 概念 | 做法 | 特点 |
|---|---|---|
| 暴力检索(Flat) | 和全部向量算距离 | 精确但慢,适合小规模数据 |
| IVF 倒排 | 先聚类,只在少数簇里搜 | 快,召回依赖聚类质量 |
| LSH 局部敏感哈希 | 用哈希让近邻撞进同一个桶 | 思路漂亮,高维数据上常不如图方法 |
| PQ 乘积量化 | 把向量压缩成短码 | 省内存,常与 HNSW 搭配使用 |
| HNSW | 多层图上贪心遍历 | 召回高、速度快,但吃内存 |
对从业者的实际意义
RAG 知识库、推荐系统、以图搜图、音频检索、海量去重,背后往往都是 HNSW。调它时主要碰三个参数:M 决定每个节点连多少邻居,越大越准、越费内存;efConstruction 影响建索引时的搜索范围,关系到图的质量;efSearch 控制查询时探索多少节点,越大越准、越慢。这些参数没有万能值,要按自己的召回率和延迟目标实测,具体默认值以你所用的库和官方文档为准。
另外,HNSW 属于内存索引,数据通常要驻留内存;向量规模特别大时,一般会配合量化或磁盘方案来控制成本。理解它的收益边界,比记住某个调参数字更重要。
