一篇文章讲明白向量数据库Milvus的索引如何选择
Milvus数据库的一个Collection中可以分为两类字段:标量字段和向量字段。标量字段就如同Mysql表中的字段一样,为了提高查询性能,可以对表字段创建索引。向量字段则是一种特殊的字段,为了提高向量查询性能,Milvus提供了多种创建索引的方式。
索引简单说就是用空间换时间,也就是创建索引需要占用一定的存储空间。向量索引根据存储的位置可以分为:内存索引、磁盘索引、GPU索引。本文则为大家介绍常用的内存索引。
目前,一个向量场只支持一种索引类型。切换索引类型时,Milvus 会自动删除旧索引。
内存索引
由于Milvus的嵌入可以分为三个类型:浮点嵌入、二进制嵌入、稀疏嵌入。根据嵌入类型的不同,Milvus支持的索引类型也会有所差异。
浮点嵌入
该类型索引包括FLAT、IVF_FLAT、IVF_PQ、IVF_SQ8、HNSW和SCANN,都是基于 CPU 的 ANN 搜索。可以选择的距离度量(metric_type)有:欧式距离(L2)、内积(IP)、余弦相似度(COSINE)
支持的索引 | 分类 | 场景 |
---|---|---|
平面 | 不适用 | |
IVF_FLAT | 基于量化的索引 | |
IVF_SQ8 | 基于量化的索引 | |
IVF_PQ | 基于量化的索引 | |
HNSW | 基于图形的索引 | |
SCANN | 基于量化的索引 |
二进制嵌入
该类型索引包括BIN_FLAT、BIN_IVF_FLAT,常用的距离度量有:汉明(HAMMING)、雅卡德(JACCARD)。
支持的索引 | 分类 | 场景 |
---|---|---|
BIN_FLAT | 基于量化的索引 | |
BIN_IVF_FLAT | 基于量化的索引 |
稀疏嵌入
该类型的索引包括:SPARSE_INVERTED_INDEX、SPARSE_WAND,距离度量只能用内积(IP)。
支持的索引 | 分类 | 场景 |
---|---|---|
SPARSE_INVERTED_INDEX | 倒置索引 | |
SPARSE_WAND | 反向索引 |
进阶
对于初学者而言,我们可以不用太关注各种类型的索引之间的差异,先对Milvus有一个整体的了解则更重要。但是当我们想要进一步用好Milvus时,就需要大家根据自己的场景选择适合自己的索引类型和距离度量了。想要进一步学习,可以关注:遇码,回复milvus获取官方文档。