管理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屬性) | 設置 |
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 # 設置集合的分片數量,可根據實際需求調整。
)