向量索引概述
向量索引
向量索引(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 会直接在段内做全量搜索。