跳到主要内容

创建 Vector Index

本教程将介绍如何为 Collection 中的向量字段创建向量索引(Vector Index)并管理索引。

概述

通过索引文件中存储的元数据,Zilliz Cloud 能够以一种特殊的结构组织您的数据,从而加速数据搜索和查询的过程。

Zilliz Cloud 通过 AUTOINDEX 实现高效相似性搜索。Zilliz Cloud 提供以下计算向量距离的相似度类型余弦距离 (COSINE)欧氏距离 (L2)内积 (IP)JACCARD (Beta)HAMMING (Beta)。有关更多向量字段类型和度量指标信息,请参考相似度类型了解 Schema

我们建议您为向量字段和常用于过滤的标量字段创建索引。

如果您的 collection 包含了多个向量字段,您可以为各向量字段分别创建索引。

准备工作

创建 Collection中已经说明了Zilliz Cloud 会在以下几种情况下,随 Collection 自动创建索引并加载到内存中:

  • 在创建 Collection 命令中设置了向量字段维度和相似度类型

  • 在创建 Collection 命令中设置了 Schema 和索引参数

以下示例代码基于现有代码重新连接至 Zilliz Cloud 集群 并创建 Collection。Collection 创建过程中并未设置索引参数,因此该 Collection 中未创建索引且未自动加载。

from pymilvus import MilvusClient, DataType

CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT"
TOKEN = "YOUR_CLUSTER_TOKEN"

# 1. Set up a Milvus client
client = MilvusClient(
uri=CLUSTER_ENDPOINT,
token=TOKEN
)

# 2. Create schema
# 2.1. Create schema
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)

# 2.2. Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)

# 3. Create collection
client.create_collection(
collection_name="customized_setup",
schema=schema,
)

创建索引

如需为 Collection 创建索引,请调用 create_index() 命令并设置索引参数。

# 4. Set up index
# 4.1. Set up the index parameters
index_params = MilvusClient.prepare_index_params()

# 4.2. Add an index on the vector field.
index_params.add_index(
field_name="vector",
metric_type="COSINE",
index_type="AUTOINDEX",
index_name="vector_index"
)

# 4.4. Create an index file
client.create_index(
collection_name="customized_setup",
index_params=index_params
)

# 5. Describe index
res = client.list_indexes(
collection_name="customized_setup"
)

上述代码为向量字段创建了类型为 AUTOINDEX 的索引,相似度类型设置为 COSINE。此外,上述代码还同时为标量字段创建了类型为 AUTOINDEX 的索引。更多有关索引类型和相似度类型详情,请参考 AUTOINDEX相似度类型

📘说明

目前,每个字段上仅可创建 1 个索引文件。

查看索引详情

索引创建成功后,您可以查看索引详情。

# 5. Describe index
res = client.list_indexes(
collection_name="customized_setup"
)

print(res)

# Output
#
# [
# "vector_index"
# ]

res = client.describe_index(
collection_name="customized_setup",
index_name="vector_index"
)

print(res)

# Output
#
# {
# "index_type": "AUTOINDEX",
# "metric_type": "COSINE",
# "field_name": "vector",
# "index_name": "vector_index"
# }

您可以通过查看某一特定字段上的索引文件了解已创建索引的数据行数。

删除索引

您可以删除不再使用的 Vector index 索引。

# 6. Drop index
client.drop_index(
collection_name="customized_setup",
index_name="vector_index"
)