ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

向量数据库常见默认索引 - HNSW - 图 - 多级检索 - Hierarchical Navigable Small World

向量数据库常见默认索引 - HNSW - 图 - 多级检索 - Hierarchical Navigable Small World HNSW 靠 “顶层粗跳缩小范围底层细搜锁定答案” 的方式用少量跳跃就找到近似最近邻这正是它比暴力全扫快得多的原因建图索引构建、检索使用索引查询连接点edge边1. 提供 “跳转路径”搜索的通道查询时算法沿着边从一个节点跳到另一个节点每次都跳到与查询向量更相似那个类似 “贪心下山”。没有边节点就是孤岛无法搜索2. 连接上下层纵向边 层间通道边分两类层内边同一层里相邻节点之间的连接横向负责这一层的精细搜索层间边上下层之间同一向量对应节点的连接纵向查询时靠它从上层逐层下探到底层搜索流程就是从顶层入口开始 → 沿层内边粗跳 → 通过层间边下到下一层 → 再沿该层的边细搜 → 一直到底层3. 决定 “召回精度 vs 成本” 的旋钮M 参数连接点数量由M每个节点的最大连接数控制M 大→ 边多搜索路径更全召回更准但内存占用大、建索引慢M 小→ 边少省内存省时间但可能跳过头召回下降它解决什么问题在海量向量里找 “最相似” 的。暴力全扫最准但太慢HNSW 用图结构 贪心换取 “几乎一样准但快几个数量级”。它的数据结构不是排序数组不是哈希桶而是一张多层图Graph节点 一个向量边 “我离这个向量比较近”多层 底层放全部向量上层只有少数代表图上没有全局顺序每个节点只 “认识” 自己连着的几个邻居。这就是为什么它找答案靠 “看邻居、比较、跳”建图阶段一次性的准备工作每个向量成为节点连到最近的 M 个邻居每个节点随机决定层数多数只在底层形成 “底层密、上层稀” 的倒金字塔结构检索阶段每次查询要做的事顶层粗跳从稀疏的顶层入口看邻居里谁更近就跳过去 —— 在极少节点里快速锁定 “大概区域”逐层下探每层到局部最优点后往下一层重复 “看邻居→跳更近”底层精搜在最密的底层只在这一小片区域贪心走几步走到 “没有邻居比我更近” 就停返回当前这个局部最优点就是答案近似最近邻它为什么快整个过程只看 “沿途的一小撮邻居”从不全库比较。层越多顶层越稀疏粗定位越省力相关参数M 和 ef_construction 建索引时定好基本不动ef_search 是查询时随时可调的旋钮 —— 快就调小准就调大
返回列表