Schema 说明
本页介绍 schema 的定义以及如何为向量数据库管理 schema。
概述
Collection schema 是 collection 的逻辑定义。通常情况下,您需要先了解 collection schema,然后才能管理您的 collection。具体而言,您需要决定:
- Collection 的 field 以及每个 field 的属性。
- 是否启用动态 field。
- 描述 collection 的描述。
Collection schema 由多个 field schema 组成。每个 field schema 描述一个 field 的属性。
Field schema
field schema 是 field 的逻辑定义。在设计 field schema 时,您需要考虑以下因素:
- Field 名称
- Field 数据类型
- 其他可选 field 属性
支持的数据类型
Milvus 支持多种数据类型的 field。这些数据类型可以分为三类:
- 主键类型:INT64 和 VARCHAR。
- 向量类型:BINARY_VECTOR,FLOAT_VECTOR,FLOAT16_VECTOR,BFLOAT16_VECTOR 和 SPARSE_FLOAT_VECTOR。
- 标量类型:BOOL,INT8,INT16,INT32,INT64,FLOAT,DOUBLE,VARCHAR,JSON 和 ARRAY。
要了解更多信息,请参阅 支持的数据类型。
可选 Field 属性
除了 field 名称和数据类型之外,每个 field 还可以有可选属性。下表列出了可用的 field 属性。
属性名称 | 描述 |
---|---|
dim | 向量 field 中向量的维度,介于 1 和 32,768 之间。仅用于向量 field。 |
max_length | 接受的最大字符数。仅用于 VARCHAR field。 |
description | Field 的描述。 |
default_value | Field 的默认值。有关详细信息,请参阅 默认值和可空性。 |
nullable | 此 field 是否可以为空。有关详细信息,请参阅 默认值和可空性。 |
is_primary | 是否将此 field 设置为 primary field。 |
auto_id | 是否自动分配 ID。只能用于 primary field。有关详细信息,请参阅 Primary field & AutoID。 |
is_partition_key | 是否将此 field 设置为 partition key。有关详细信息,请参阅 使用 Partition Key。 |
is_function_output | 是否为 function 输出 field。有关详细信息,请参阅 Function。 |
创建 Field Schema
要减少数据插入期间的麻烦,Milvus 允许您在创建 collection schema 期间指定每个 field 的默认值。有关更多信息,请参阅 默认值和可空性。
以下代码片段创建一个 field schema,其中 field 名为 my_field,数据类型为 DataType.INT64,描述为 this is a new field。
from pymilvus import MilvusClient, DataType
schema = MilvusClient.create_schema()
import io.milvus.v2.service.collection.request.CreateCollectionReq;
CreateCollectionReq.CollectionSchema schema = client.createSchema();
import { MilvusClient, DataType } from "@zilliz/milvus2-sdk-node";
const schema = []
export schema='{
"fields": []
}'
上述代码片段中的 dim
参数表示向量 field 中要保存的向量嵌入的维度。FLOAT_VECTOR
值表示向量 field 保存 32 位浮点数列表,通常用于表示反对数。除此之外,Milvus 还支持以下类型的向量嵌入:
-
FLOAT16_VECTOR
此类型的向量 field 保存 16 位半精度浮点数列表,通常应用于内存或带宽受限的深度学习或基于 GPU 的计算场景。
-
BFLOAT16_VECTOR
此类型的向量 field 保存 16 位浮点数列表,具有降低的精度但与 Float32 相同的指数范围。这种数据类型通常用于深度学习场景,因为它减少了内存使用而不会显著影响准确性。
-
BINARY_VECTOR
此类型的向量 field 保存 0 和 1 的列表。它们在图像处理和信息检索场景中用作紧凑特征来表示数据。
-
SPARSE_FLOAT_VECTOR
此类型的向量 field 保存非零数及其序列号的列表,用于表示稀疏向量嵌入。
添加标量 Field
在常见情况下,您可以使用标量 field 来存储向量嵌入的元数据,并使用元数据过滤进行 ANN 搜索,以提高搜索结果的正确性。Milvus 支持多种标量 field 类型,包括 VarChar、Boolean、Int、Float、Double、Array 和 JSON。
添加字符串 Field
在 Milvus 中,您可以使用 VarChar field 来存储字符串。有关 VarChar field 的更多信息,请参阅 字符串 Field。
schema.add_field(
field_name="my_varchar",
datatype=DataType.VARCHAR,
# highlight-next-line
max_length=512
)
schema.addField(AddFieldReq.builder()
.fieldName("my_varchar")
.dataType(DataType.VarChar)
// highlight-next-line
.maxLength(512)
.build());
schema.push({
name: "my_varchar",
data_type: DataType.VarChar,
// highlight-next-line
max_length: 512
});
export varCharField='{
"fieldName": "my_varchar",
"dataType": "VarChar",
"elementTypeParams": {
"max_length": 256
}
}'
export schema="{
\"autoID\": false,
\"fields\": [
$primaryField,
$vectorField,
$varCharField
]
}"
添加数字 Field
Milvus 支持的数字类型有 Int8
、Int16
、Int32
、Int64
、Float
和 Double
。有关数字 field 的更多信息,请参阅 数字 Field。
schema.add_field(
field_name="my_int64",
datatype=DataType.INT64,
)
schema.addField(AddFieldReq.builder()
.fieldName("my_int64")
.dataType(DataType.Int64)
.build());
schema.push({
name: "my_int64",
data_type: DataType.Int64,
});
export int64Field='{
"fieldName": "my_int64",
"dataType": "Int64"
}'
export schema="{
\"autoID\": false,
\"fields\": [
$primaryField,
$vectorField,
$varCharField,
$int64Field
]
}"
添加布尔 Field
Milvus 支持布尔 field。以下代码片段演示如何添加布尔 field。
schema.add_field(
field_name="my_bool",
datatype=DataType.BOOL,
)
schema.addField(AddFieldReq.builder()
.fieldName("my_bool")
.dataType(DataType.Bool)
.build());
schema.push({
name: "my_bool",
data_type: DataType.Boolean,
});
export boolField='{
"fieldName": "my_bool",
"dataType": "Boolean"
}'
export schema="{
\"autoID\": false,
\"fields\": [
$primaryField,
$vectorField,
$varCharField,
$int64Field,
$boolField
]
}"
添加 JSON Field
JSON field 通常存储半结构化的 JSON 数据。有关 JSON field 的更多信息,请参阅 JSON Field。
schema.add_field(
field_name="my_json",
datatype=DataType.JSON,
)