构建向量索引
本指南介绍了如何在Milvus中构建向量索引。
向量索引是用于加速向量相似度搜索的元数据组织单位。如果没有在向量上构建索引,Milvus将执行一次暴力搜索。
默认情况下,Milvus不会对少于1,024行的段进行索引。
下面的示例使用欧氏距离(L2)构建了一个包含1024个簇的IVF_FLAT索引。您可以选择适合您场景的索引和度量方式。
准备索引参数
请按照以下步骤准备索引参数:
index_params = {
"metric_type":"L2",
"index_type":"IVF_FLAT",
"params":{"nlist":1024}
}
参数 | 描述 | 选项 |
---|---|---|
metric_type |
用于衡量向量相似度的度量类型。 | 浮点型向量:- L2 (欧氏距离)- IP (内积)- COSINE (余弦相似度)二进制向量:- JACCARD (杰卡德距离)- HAMMING (汉明距离) |
index_type |
用于加速向量搜索的索引类型。 | 浮点型向量:- FLAT (FLAT)- IVF_FLAT (IVF_FLAT)- IVF_SQ8 (IVF_SQ8)- IVF_PQ (IVF_PQ)- GPU_IVF_FLAT* (GPU_IVF_FLAT)- GPU_IVF_PQ*> (GPU_IVF_PQ)- HNSW (HNSW)- DISKANN* (DISKANN)二进制向量:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT) |
params |
特定于索引的构建参数。 | 有关更多信息,请参见内存索引和磁盘索引。 |
- DISKANN 需要满足一定的先决条件。有关详细信息,请参阅磁盘索引。
- GPU_IVF_FLAT 和 GPU_IVF_PQ 仅在启用了GPU功能的Milvus安装中可用。
构建索引
通过指定向量字段名称和索引参数来构建索引。
from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
field_name="book_intro",
index_params=index_params
)
utility.index_building_progress("book")
参数 | 描述 |
---|---|
field_name |
要在其上构建索引的向量字段的名称。 |
index_params |
要构建的索引的参数。 |
构建标量索引
与向量不同,标量只有大小没有方向。Milvus将单个数字和字符串视为标量。以下是Milvus中标量字段的可用数据类型列表。
从Milvus v2.1.0开始,为了加速混合搜索中的属性过滤,您可以在标量字段上构建索引。您可以在这里阅读有关标量字段索引的更多信息。
构建索引
在标量字段上构建索引时,您无需设置任何索引参数。标量字段索引名称的默认值为default_idx
,后面跟着索引字段的名称。您可以将其设置为其他合适的值。
以下代码片段假设已经存在一个名为book
的集合,并且要在字符串字段book_name
上创建索引。
from pymilvus import Collection
collection = Collection("book")
collection.create_index(
field_name="book_name",
index_name="scalar_index",
)
collection.load()
索引创建完毕后,您可以在向量相似性搜索中包含对该字符串字段的布尔表达式,如下所示:
search_param = {
"data": [[0.1, 0.2]],
"anns_field": "book_intro",
"param": {"metric_type": "L2", "params": {"nprobe": 10}},
"limit": 2,
"expr": "book_name like \"Hello%\"",
}
res = collection.search(**search_param)
删除索引
from pymilvus import Collection
collection = Collection("book") # 获取一个已存在的集合。
collection.drop_index()