土法炼钢兴趣小组的算法知识备份

【向量检索引擎】ANN 算法工程接口:从 HNSW/IVF 到 Knowhere 契约

文章导航

分类入口
databasestorage
标签入口
#ann#hnsw#ivf#diskann#knowhere#milvus#index-params#vector-engine

目录

db-frontier/08 讲清了 HNSW、DiskANN、IVF-PQ 的图/倒排假设与召回–QPS–内存三角。第 8 篇 讲清了 Knowhere 的 VecIndex 类层次与工厂。中间还缺一张 工程师调参时看见的接口表:集合上声明哪种索引、哪些参数属于构建期、哪些属于查询期、Flat 在引擎里扮演什么角色。

本文不重证小世界图性质,只建立 算法名 → 引擎契约 的翻译层。

本文是「向量检索引擎」系列第 2 篇(共 18 篇)。→ 系列目录

版本锚定:Milvus 2.6.x Knowhere / Architecture;算法细节外链 frontier/08。


一、引擎需要的不是论文,是四个动词

生产路径里,ANN 对引擎暴露的能力可以收成:

动词 含义 典型发生位置
Train 需要训练的结构(如 IVF 质心)在数据上拟合 Data Node 建索 / Knowhere
Build / Add 把段内向量写入索引结构 同上
Serialize / Load 索引落对象存储,Query Node 加载 第 6、7、10 篇
Search / Query 带可选 bitset 掩码的近似 Top-\(k\) Segcore → Knowhere

Knowhere 文档强调:与经典「训练集 / 测试集分离」不同,段内数据既用于 train 也用于 search。因此索引生命周期 贴着 Sealed segment,而不是贴着全局离线竞赛设定(第 3、10 篇)。


二、类型速查:算法假设 → 引擎选型直觉

下表只给 接口层直觉;复杂度与参数精调见 frontier/08 与 llm-infra/18。

引擎侧常见类型 算法家族 内存/磁盘假设 何时优先考虑
FLAT / IDMAP 暴力 全向量常驻计算 召回金标准、小段、调参对照
IVF_FLAT / IVF_PQ / IVF_SQ* 倒排 + 可选量化 列表扫描;PQ 换内存 可接受训练、偏吞吐/压缩
HNSW 分层小世界图 高内存图 低延迟内存检索主流默认
DiskANN 等 磁盘友好图 索引主要在盘/对象侧 单机内存装不下全体图
二进制族 Hamming 等 压缩二值向量 指纹/化学等二值特征

Architecture Overview 写明 Milvus 构建在 Faiss、HNSW、DiskANN、SCANN 等库之上;具体 release 启用哪些 index_type 字符串以当时 Index 文档为准。

2.1 构建期 vs 查询期参数

阶段 例子(概念名) 工程含义
构建期 HNSW 的 MefConstruction;IVF 的 nlist 改了通常要 重建索引
查询期 HNSW 的 ef;IVF 的 nprobe 可按请求调节延迟/召回,不必重建

把查询期参数当成「免费旋钮」、把构建期参数当成「变更窗口」——排障时先分清改的是哪一类。

2.2 Flat 的系统角色

Knowhere 把 IDMAP 也做成 VecIndex:无 train/build,查询直接打原始向量。系统用途:

  1. 离线算 的 ground truth;
  2. 小数据或索引未就绪时的正确性路径;
  3. 对比「加索引后掉了多少召回」的基线。

不要在十亿级集合上把 Flat 当默认在线索引。


三、与 Segment / 过滤的接口接点

  1. 每 Sealed 一段一索引(Data Processing)→ 全局一次 search = 多索引候选归并(第 9 篇)。
  2. bitset 软删与属性过滤(Bitset / Knowhere)→ Search 必须接受「哪些行仍参与」的掩码(第 11、13 篇)。
  3. Growing 路径可能尚无最终 ANN 结构 → 实时可搜 ≠ 最终索引形态(第 5、10 篇)。

选择度很低的标量过滤会让「局部 Top-\(k\) 再合并」失效——这是算法三角之外的第四个变量,展开见第 11 篇与 db-frontier/09


四、插件契约(回指第 8 篇)

向 Knowhere 增加索引类型的官方步骤:IndexEnumConfAdapter 校验 → 实现 VecIndexVecIndexFactory → unittest。量化系参考 IVF_FLAT,图系参考 HNSW,树系参考 Annoy

本篇对应用的含义:你在 SDK 里填的 index_type / params,最终要落到某一 VecIndex 实现的 Train/Query;没有实现的字符串不是「配置写错了就会自动降级」的承诺


五、学术谱系与开放问题

代表 本文角色
算法 Malkov HNSW;DiskANN;IVF-PQ 外链 frontier/08
Faiss / Hnswlib Knowhere 之下
契约 VecIndex 四动词 + 段生命周期 本篇
系统 Milvus Workers 第 7–10 篇

开放问题:多向量字段时,单段多索引的参数面如何避免组合爆炸;磁盘索引与对象存储冷热分层如何共用同一套 Load 语义(第 6、18 篇)。


六、小结

ANN 进引擎后变成 Train/Build/Load/Search 契约,参数分构建期与查询期,索引贴着 Segment,Flat 是金标准不是默认线上。下一篇起回到数据模型与控制面已写篇章;混合过滤见 第 11 篇


参考资料

  1. Milvus Documentation v2.6.x, KnowhereArchitecture OverviewData Processing
  2. db-frontier/08db-frontier/09
  3. 第 8 篇 Knowhere系列 index

返回 系列目录 | 上一篇:向量引擎全景 | 下一篇:Segment 状态机

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。


By .