HNSW 的原理是什么?
先自己想一想,再看参考要点
参考要点
- 把向量组织成多层图,每个向量连接附近的若干向量,层越高向量越少、连线跨度越大,最下层包含全部向量
- 查询从最上层的入口开始,上面各层只保留一个最近节点,贪心地走向查询,走不动就下降一层,最下层保留 efSearch 个候选扩展邻居,从中取前 K 个,思路类似跳跃表
- 上层的长连线让查询几步就到目标附近,12.4 万个向量上每次只算约 1300 次距离(暴力检索的 1.1%)
- 过滤掉大部分向量、大量删除和内存放不下时会变差
- M、efConstruction、efSearch 在速度、内存和召回率之间权衡