管理Collections
Milvus中的Collections类似于关系型数据库中的“表”,是组织和管理向量数据以及相关标量元数据的核心单元。通过灵活配置索引、分区和分片,您能够根据实际需求定制化数据处理流程,实现从数据摄入、存储、查询到分析的全链路解决方案。
前提条件
已在本地客户端成功安装了PyMilvus库,并将其更新至当前最新版本。
如果您尚未在本地客户端安装PyMilvus库,或者需要将其更新至当前最新版本,您可以执行以下命令。
pip install --upgrade pymilvus
已创建Milvus实例,请参见详情快速创建Milvus实例。
创建Collection
快速创建Collection
您可以通过指定Collection的名称和向量维度来快速创建Collection。
from pymilvus import MilvusClient
# 创建Milvus Client。
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # Milvus实例的公网地址。
token="<yourUsername>:<yourPassword>", # 登录Milvus实例的用户名和密码。
db_name="default" # 待连接的数据库名称,本文示例为默认的default。
)
# 创建名称为milvus_collection的Collection。
client.create_collection(
collection_name="milvus_collection",
dimension=5
)
res = client.get_load_state(
collection_name="milvus_collection"
)
# 返回Collection当前的加载状态。
print(res)
运行此代码可创建一个仅含有两个字段“id”(主键)和“vector”(向量字段)的Collection,同时默认启用“auto_id”和“enable_dynamic_field”属性。
auto_id
: 当启用此属性后,系统将自动为每条记录分配一个自增的主键值,无需手动设置主键。enable_dynamic_field
: 启用此属性后,除已定义的“id”和“vector”字段外,其他任意新字段都会被视为动态字段,并以键值对形式存储于名为$meta
的特殊字段中。这一特性允许插入尚未定义的新字段。
通过上述设置,可以在不预先定义所有字段的情况下,灵活地插入和管理数据。
自定义创建Collection
自定义创建Collection时,您可以根据需要指定schema和index参数。
from pymilvus import MilvusClient, DataType, time
# 创建Milvus Client。
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # Milvus实例的公网地址。
token="<yourUsername>:<yourPassword>", # 登录Milvus实例的用户名和密码。
db_name="default" # 待连接的数据库名称,本文示例为默认的default。
)
# 创建Schema。
schema = MilvusClient.create_schema(
auto_id=False, # 禁用ID自动生成。
enable_dynamic_field=True, # 支持动态字段。
)
# 添加schema字段
# 添加名为test_id的字段,数据类型为INT64,表示一个整数类型的主键字段。
schema.add_field(field_name="test_id", datatype=DataType.INT64, is_primary=True)
# 添加名为test_vector的字段,数据类型为FLOAT_VECTOR,dim(维度)为768。
schema.add_field(field_name="test_vector", datatype=DataType.FLOAT_VECTOR, dim=768)
# 定义index参数。
index_params = client.prepare_index_params()
# 添加index参数。
index_params.add_index(
field_name="test_id", # 设置索引名称。
index_type="STL_SORT" # 设置索引类型。
)
index_params.add_index(
field_name="test_vector", # 设置索引名称。
index_type="IVF_SQ8", # 设置索引类型。
metric_type="L2", # 设置度量类型,例如L2。
params={"nlist": 128}
)
# 创建collection时加载index。
client.create_collection(
collection_name="milvus_collection", # 创建名称为milvus_collection的Collection。
schema=schema,
index_params=index_params
)
time.sleep(5)
res = client.get_load_state(
collection_name="milvus_collection"
)
print(res)
您也可以将collection和index分开创建,代码示例如下所示。
# 创建名称为milvus_collection1的Collection。
client.create_collection(
collection_name="milvus_collection1",
schema=schema,
)
# 查询milvus_collection1的加载状态。
res = client.get_load_state(
collection_name="milvus_collection1"
)
print(res)
# 为milvus_collection1创建索引。
client.create_index(
collection_name="milvus_collection1",
index_params=index_params
)
# 查询创建索引后milvus_collection1的加载状态。
res = client.get_load_state(
collection_name="milvus_collection1"
)
print(res)
查看Collection
查看Collection明细。
res = client.describe_collection(collection_name="milvus_collection") print(res)
查看当前Database下的所有Collections。
res = client.list_collections() print(res)
加载和卸载Collection
在对Collection进行加载操作时,Milvus会同步将该Collection关联的索引文件载入内存。反之,当执行Collection的卸载操作时,Milvus会将其索引文件从内存中移除。为了确保搜索操作的正常进行,您必须确保在对Collection进行检索时,该Collection已处于加载状态。
加载Collection
client.load_collection(
collection_name="milvus_collection"
)
res = client.get_load_state(
collection_name="milvus_collection"
)
print(res)
卸载Collection
client.release_collection(
collection_name="milvus_collection"
)
res = client.get_load_state(
collection_name="milvus_collection"
)
print(res)
删除Collection
client.drop_collection(
collection_name="milvus_collection"
)
client.drop_collection(
collection_name="milvus_collection1"
)