跳到主要内容

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。
descriptionField 的描述。
default_valueField 的默认值。有关详细信息,请参阅 默认值和可空性
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 类型,包括 VarCharBooleanIntFloatDoubleArrayJSON

添加字符串 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 支持的数字类型有 Int8Int16Int32Int64FloatDouble。有关数字 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,
)