jianwei
jianwei
发布于 2026-01-05 / 3 阅读
0
0

向量数据库-索引

索引构建

向量数据库主要使用多种高效的索引算法来加速相似性搜索。这些算法设计用于解决"维度灾难"问题,并在高维空间中实现快速近似最近邻(ANN)搜索。以下是主要索引算法的详细介绍:

1. HNSW (Hierarchical Navigable Small World)

工作原理

  • 构建一个多层的图结构,顶层是稀疏连接,底层逐渐变得密集

  • 搜索从顶层开始,通过"梯度下降"方式逐层接近目标

  • 利用贪婪搜索+分层策略,实现对数级复杂度的查询

特点

  • 查询速度极快,表现出色

  • 内存占用较大

  • 不支持动态删除(只能标记删除)

  • 构建时间较长但查询性能优异

  • 被Qdrant、Milvus、Weaviate等广泛采用

2. IVF (Inverted File Index)

工作原理

  • 将向量空间分割成多个聚类

  • 查询时先找到最近的聚类中心,再在相关聚类中搜索

  • 基本上是"粗搜索+精搜索"的两阶段方法

特点

  • 构建速度快

  • 内存占用适中

  • 支持动态添加和删除

  • 查询速度与HNSW相比略慢

  • Faiss和许多向量数据库都提供IVF实现

3. 积木量化 (Product Quantization, PQ)

工作原理

  • 将高维向量分解为多个低维子向量

  • 对每个子空间独立进行向量量化

  • 通过查表计算近似距离,大幅减少内存使用

特点

  • 显著减少内存占用

  • 允许处理更大规模的向量集

  • 牺牲一定精度换取效率

  • 常与其他索引方法结合使用(如IVF-PQ)

  • 在Faiss、Milvus等实现中广泛应用

4. LSH (局部敏感哈希)

工作原理

  • 设计特殊哈希函数,使相似向量更可能被哈希到同一桶

  • 查询时只需检索相同或相近桶中的向量

  • 通常使用多个哈希表提高查询精度

特点

  • 理论基础扎实

  • 对高维数据表现良好

  • 构建简单,易于理解

  • 精度不如图结构方法

  • 主要用于初筛或与其他方法结合

5. 树结构索引 (KD-Tree, Ball Tree等)

工作原理

  • 递归地将向量空间划分为子空间

  • 构建树结构,每个节点代表一个划分

  • 查询时递归遍历树找到最近邻

特点

  • 对低维数据(10维以下)效果好

  • 高维空间效率急剧下降

  • 构建简单,内存占用适中

  • 主要用于低维场景或特殊应用

6. DiskANN

工作原理

  • 结合图索引和分层策略

  • 专为磁盘存储优化的图遍历算法

  • 使用预取机制减少随机IO

特点

  • 允许处理超大规模向量集

  • 相比纯内存解决方案降低成本

  • 牺牲部分速度换取存储扩展性

  • 对SSD存储进行优化

  • Milvus和某些专门数据库采用此方案

7. 混合索引策略

现代向量数据库通常结合多种索引方法:

  • IVF + HNSW: 先做粗聚类,再在聚类内应用HNSW

  • IVF + PQ: 先聚类,再对每个聚类应用PQ压缩

  • HNSW + PQ: 在HNSW图上应用PQ压缩向量

  • 多级量化: 使用多层量化策略降低内存占用

8. 过滤器加速

除了基本索引外,向量数据库还实现了各种过滤优化:

  • 预过滤: 先应用属性过滤再做向量检索

  • 后过滤: 先做向量检索再过滤结果

  • 混合过滤: 同时考虑向量相似度和属性条件

  • 位图索引: 加速标量属性的过滤操作


评论