Schema
Schema 用于定义 Collection 以及其 Field 的属性。
Field schema
Field schema 是 Field 的逻辑定义。通常你需要在定义 Collection schema 和 创建 collection 之前定义 Field schema。
Milvus 2.0 仅支持一个 collection 中包含一个 primary key field。
Field schema 属性
属性 | 描述 | 备注 |
---|---|---|
name | 要创建的 field 名 | 数据类型:String 强制 |
dtype | 要创建的 field 数据类型 | 强制 |
description | 要创建的 field 描述 | 数据类型:String 可选 |
is_primary | 是否设定该 field 为 primary key field | 数据类型:布尔值 (true 或 false )。对 primary key field 强制 |
dim | 向量维度 | 数据类型:整数 ∈[1, 32768]。 对向量 field 强制 |
创建 field schema
from pymilvus import FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
支持的 data type
DataType
定义 field 所包含的数据类型。不同 field 支持不同 DataType
。
- Primary key field 支持:
- INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- 标量 field 支持:
- BOOL: Boolean (
true
或false
) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT: numpy.float32
- DOUBLE: numpy.double
- BOOL: Boolean (
- 向量 field 支持:
- BINARY_VECTOR: Binary vector
- FLOAT_VECTOR: Float vector
Collection schema
Collection schema 是 collection 的逻辑定义。通常你需要在定义 collection schema 和 创建 collection 之前定义 field schema。
Collection schema 属性
属性 | 描述 | 备注 |
---|---|---|
field | 要创建的 collection 中的 field | 强制 |
description | collection 描述 | 数据类型:String。 可选 |
auto_id | 是否启用自动分配 ID (即 primary key) | 数据类型:Boolean (true 或 false )。可选 |
创建 collection schema
先定义 field schema,再定义 collection schema。
from pymilvus import FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, description="desc of a collection")
使用指定的 schema 创建 collection:
from pymilvus import Collection
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
你可以使用
shards_num
参数定义分片编号,并在 using
中指定 alias 来定义在哪个 Milvus server 中创建 collection。
你也可以使用 Collection.construct_from_dataframe
自动从 DataFrame 生成一个 collection schema 并创建一个 collection。
import pandas as pd
df = pd.DataFrame({
"id": [i for i in range(nb)],
"age": [random.randint(20, 40) for i in range(nb)],
"embedding": [[random.random() for _ in range(dim)] for _ in range(nb)]
})
collection, ins_res = Collection.construct_from_dataframe(
'my_collection',
df,
primary_field='id',
auto_id=False
)