在Milvus中,Schema定义了向量数据库中数据的组织结构,包括字段名称和类型等。通过定义Schema来管理和查询数据,以支持高效的搜索和分析操作。本文为您介绍Collection和字段的Schema定义以及如何在Milvus中创建Schema。
前提条件
-
已在本地客户端成功安装了PyMilvus库,并将其更新至当前最新版本。
如果您尚未在本地客户端安装PyMilvus库,或者需要将其更新至当前最新版本,您可以执行以下命令。
pip install --upgrade pymilvus
-
已创建Milvus实例,请参见详情快速创建Milvus实例。
Schema介绍
在创建集合之前,通常需要预先定义字段的Schema,以便在构建集合时能够整合并应用这些字段的Schema以及集合的Schema设置。
字段Schema
在Milvus中定义字段Schema时,系统当前只允许指定一种类型的字段作为主键(Primary Key)。
属性 |
描述 |
name |
字段的名称。 |
dtype |
字段的数据类型。 |
description |
字段的描述信息。 |
is_primary |
是否将该字段设为主键。取值为True或False。 |
auto_id(主键字段) |
是否为主键字段启用自动递增ID。取值为True或False。 |
max_length(Varchar属性) |
设置 |
dim |
向量字段的维度,是一个整数(Integer)类型的值,取值范围为[1, 32768]。 |
is_partition_key |
是否将该字段作为分区键使用。取值为True或False。 |
Collection Schema
Collection Schema是Milvus中对集合结构和特性的详细定义。
属性 |
描述 |
field |
集合中定义的字段。 |
description |
集合的描述信息。可选参数。 |
partition_key_field |
分区字段的名称。可选参数。 |
enable_dynamic_field |
是否开启动态Schema属性。默认值为False。 |
创建Collection Schema
以下代码示例为您展示了如何使用 FieldSchema
来定义各个字段的属性,然后基于这些属性构建 CollectionSchema
,并最终创建 Collection
对象的过程。集合创建好后,便可执行数据插入、查询等后续操作。
from pymilvus import FieldSchema, CollectionSchema, connections, DataType, Collection
conn = connections.connect(host="c-xxx.milvus.aliyuncs.com", port=19530, user="<yourUsername>", password="<yourPassword>")
# 定义集合字段(FieldSchema)。
# 主键字段:id,类型为INT64,用于唯一标识每条记录。
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
# 年龄字段:age,类型为INT64,用于存储年龄信息。
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
# 向量字段:embedding,类型为FLOAT_VECTOR,维度为128,用于存储向量数据。
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
# 分区键字段:position,类型为VARCHAR,最大长度为256,用于进行数据分区。
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
# 使用定义好的字段构建CollectionSchema。
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")
# 定义要创建的集合名称。
collection_name = "demo_1"
# 使用定义好的Schema创建Collection对象。
collection = Collection(
name=collection_name,
schema=schema,
using='default', # 指定使用的连接名,默认为 'default'。
shards_num=2 # 设置集合的分片数量,可根据实际需求调整。
)