向量索引概述

向量索引

向量索引(vector index)是指通过某种数学模型,对向量构建的一种时间和空间上比较高效的数据结构。借助向量索引,我们能够高效地查询与目标向量相似的若干个向量。

由于精确检索通常过于耗时,Milvus 目前支持的向量索引类型大都属于 ANNS(Approximate Nearest Neighbors Search,近似最近邻搜索)。相比精确检索,ANNS 的核心思想是不再局限于只返回最精确的结果项,而是仅搜索可能是近邻的数据项,即以牺牲可接受范围内的精度的方式提高检索效率。

根据实现方式,ANNS 向量索引可分为四大类:

  • 基于树的索引
  • 基于图的索引
  • 基于哈希的索引
  • 基于量化的索引

更详细地了解索引类型,请参见 索引介绍

向量字段与索引

为了提高查询性能,你可以为每个向量字段指定一种索引类型。目前,一个向量字段只支持一种索引类型,Milvus 会在切换索引类型时自动删除旧索引。

创建索引

调用 create_index 接口时,Milvus 会对该字段上的已有数据同步建立索引。每当后续插入的数据的大小达到系统配置的 index_file_size 时,Milvus 会为其在后台自动创建索引。

当插入的数据段少于 4096 行时,Milvus 不会为其建立索引。

分段建索引

Milvus 分段存储海量数据。在建立索引时,Milvus 为每个数据分段单独创建索引。

闲时建索引

众所周知,建索引是一个比较消耗计算资源和时间的工作。当查询任务和后台建索引任务并发时,Milvus 通常把计算资源优先分配给查询任务,即用户发起的任何查询命令都会打断后台正在执行的建索引任务。之后仅当用户持续 5 秒不再发起查询任务,Milvus 才会恢复执行后台建索引任务。此外,如果查询命令指定的数据段尚未建成指定索引,Milvus 会直接在段内做全量搜索。