一架梯子,一头程序猿,仰望星空!
Milvus向量数据库教程 > 内容正文

Python Milvus创建索引


构建向量索引

本指南介绍了如何在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_FLATGPU_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()


关联主题