管理Schema

更新时间:

在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属性)

设置Varchar类型字段的最大长度。取值范围为[1, 65535]。

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  # 设置集合的分片数量,可根据实际需求调整。
)