管理模式
本主题介绍 Milvus 中的模式。Schema 用于定义 Collection 的属性和其中的字段。
字段模式
字段模式是字段的逻辑定义。在定义Collection 模式和管理 Collection之前,首先需要定义它。
Milvus 只支持在一个 Collection 中使用一个主键字段。
字段模式属性
| 属性 | 说明 | 说明 |
|---|---|---|
name | 要创建的 Collection 中字段的名称 | 数据类型: |
| 必填 | ||
dtype | 字段的数据类型 | 必须填写 |
description | 字段描述 | 数据类型: 字符串: |
| 可选 | ||
is_primary | 是否将字段设为主键字段 | 数据类型:布尔 ( 或 ):布尔型 (true 或false)。 |
| 主键字段必须设置 | ||
auto_id (主键字段必须) | 启用或禁用自动 ID(主键)分配的开关。 | True 或False |
max_length (对 VARCHAR 字段必填) | 允许插入字符串的最大字节长度。请注意,多字节字符(如 Unicode 字符)可能占用一个以上的字节,因此请确保插入字符串的字节长度不超过指定的限制。 | [1, 65,535] |
dim | 向量的维数 | 数据类型:整数∈[1, 32768]。 |
| 稠密向量字段必须使用。稀疏向量字段省略。 | ||
is_partition_key | 该字段是否为 Partition Key 字段。 | 数据类型:布尔类型 (true 或false)。 |
创建字段 Schema
为了降低数据插入时的复杂性,Milvus 允许你在创建字段模式时为每个标量字段指定一个默认值,主键字段除外。这表明,如果在插入数据时某个字段为空,则您为该字段指定的默认值将适用。
创建常规字段模式 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")
# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
创建带有默认字段值的字段模式 Schema:
from pymilvus import FieldSchema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
# configure default value `25` for field `age`
FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]
支持的数据类型
DataType 定义字段包含的数据类型。不同的字段支持不同的数据类型。
-
主键字段支持
- INT64: numpy.int64
- varchar: varchar
-
标量字段支持
- BOOL: 布尔型 (
true或false) - INT8: numpy.int8
- INT16: numpy.int16
- INT32: numpy.int32
- INT64: numpy.int64
- FLOAT:numpy.float32
- DOUBLE: numpy.double
- varchar: varchar
- JSON:JSON
- Array: 数组数组
JSON 作为一种复合数据类型可用。JSON 字段由键值对组成。每个键都是字符串,值可以是数字、字符串、布尔值、数组或列表。有关详情,请参阅JSON:一种新的数据类型。
- BOOL: 布尔型 (
-
向量字段支持:
- BINARY_VECTOR:将二进制数据存储为 0 和 1 的序列,用于图像处理和信息检索中的紧凑特征表示。
- FLOAT_VECTOR:存储 32 位浮点数,常用于科学计算和机器学习中的实数表示。
- FLOAT16_VECTOR:存储 16 位半精度浮点数,用于深度学习和 GPU 计算,以提高内存和带宽效率。
- BFLOAT16_VECTOR:存储精度降低但指数范围与 Float32 相同的 16 位浮点数,在深度学习中很受欢迎,可在不明显影响精度的情况下降低内存和计算要求。
- SPARSE_FLOAT_VECTOR:存储非零元素及其相应索引的列表,用于表示稀疏向量。更多信息,请参阅稀疏向量。
Milvus 支持在一个 Collection 中使用多个向量字段。更多信息,请参阅混合搜索。
Collection 模式
Collection schema 是一个 Collection 的逻辑定义。通常,在定义 Collection 模式和管理 Collection之前,需要先定义字段模式。
Collection 模式属性
| 属性 | 说明 | 说明 |
|---|---|---|
field | 要创建的 Collection 中的字段 | 必填 |
description | Collection 的描述 | 数据类型: |
| 可选 | ||
partition_key_field | 用作 Partition Key 的字段名称。 | 数据类型: 字符串: |
| 可选 | ||
enable_dynamic_field | 是否启用动态 Schema | 数据类型:布尔型 (true 或false)。 |
可选,默认为False 。 | ||
| 有关动态模式的详细信息,请参阅动态模式和管理 Collection 的用户指南。 |
创建 Collection 模式
说明
在定义 Collection 模式之前先定义字段模式。
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")
# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)
# Set enable_dynamic_field to True if you need to use dynamic fields.
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")
使用指定的 Schema 创建 Collection:
from pymilvus import Collection,connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
说明
- 可以使用
shards_num定义 Partition 编号。 - 可以通过在
using中指定别名来定义要在其上创建 Collection 的 Milvus 服务器。 - 如果需要实施基于 Partition密钥的多租户,可以通过在字段上设置
is_partition_key至True来启用Partition Key功能。 - 如果需要启用动态字段,可以通过在 Collection Schema 中将
enable_dynamic_field设置为True来启用动态 Schema。
您还可以使用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)],
"position": "test_pos"
})
collection, ins_res = Collection.construct_from_dataframe(
'my_collection',
df,
primary_field='id',
auto_id=False
)
下一步
- 了解在管理 Collection 时如何准备 Schema。
- 了解有关动态 Schema 的更多信息。
- 进一步了解多租户中的 Partition Key。