跳到主要内容

Primary Field 和 AutoID

Primary field 唯一标识一个实体。本页面介绍如何添加两种不同数据类型的 primary field,以及如何启用 Milvus 自动分配 primary field 值。

概述

在 collection 中,每个实体的主键应该是全局唯一的。在添加 primary field 时,您需要显式地将其数据类型设置为 VARCHARINT64。将数据类型设置为 INT64 表示主键应该是类似于 12345 的整数;将数据类型设置为 VARCHAR 表示主键应该是类似于 my_entity_1234 的字符串。

您还可以启用 AutoID 让 Milvus 自动为传入的实体分配主键。一旦在 collection 中启用了 AutoID,在插入实体时不要包含主键。

Collection 中的 primary field 没有默认值,不能为空。

使用 Int64 Primary Keys

要使用 Int64 类型的主键,您需要将 datatype 设置为 DataType.INT64,并将 is_primary 设置为 true。如果您还需要 Milvus 为传入的实体分配主键,还需要将 auto_id 设置为 true

from pymilvus import MilvusClient, DataType

schema = MilvusClient.create_schema()

schema.add_field(
field_name="my_id",
datatype=DataType.INT64,
is_primary=True,
auto_id=True,
)
import io.milvus.v2.common.DataType;
import io.milvus.v2.service.collection.request.AddFieldReq;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

CreateCollectionReq.CollectionSchema schema = client.createSchema();

schema.addField(AddFieldReq.builder()
.fieldName("my_id")
.dataType(DataType.Int64)
.isPrimaryKey(true)
.autoID(true)
.build());
);
import { DataType } from "@zilliz/milvus2-sdk-node";

const schema = [
{
name: "pk",
description: "ID field",
data_type: DataType.INT64,
is_primary_key: true,
max_length: 100,
},
];
import "github.com/milvus-io/milvus/client/v2/entity"

schema := entity.NewSchema()
schema.WithField(entity.NewField().WithName("my_id").
WithDataType(entity.FieldTypeInt64).
WithIsPrimaryKey(true).
WithIsAutoID(true),
)
export primaryField='{
"fieldName": "my_id",
"dataType": "Int64",
"isPrimary": true
}'

export schema="{
\"autoID\": true,
\"fields\": [
$primaryField
]
}"

使用 VarChar Primary Keys

要使用 VarChar 主键,除了将 data_type 参数的值更改为 DataType.VARCHAR 外,您还需要为该字段设置 max_length 参数。

schema.add_field(
field_name="my_id",
datatype=DataType.VARCHAR,
is_primary=True,
auto_id=True,
max_length=512,
)
schema.addField(AddFieldReq.builder()
.fieldName("my_id")
.dataType(DataType.VarChar)
.isPrimaryKey(true)
.autoID(true)
.maxLength(512)
.build());
schema.push({
name: "my_id",
data_type: DataType.VarChar,
is_primary_key: true,
autoID: true,
maxLength: 512
});
schema := entity.NewSchema()
schema.WithField(entity.NewField().WithName("my_id").
WithDataType(entity.FieldTypeVarChar).
WithIsPrimaryKey(true).
WithIsAutoID(true).
WithMaxLength(512),
)
export primaryField='{
"fieldName": "my_id",
"dataType": "VarChar",
"isPrimary": true
}'

export schema="{
\"autoID\": true,
\"fields\": [
$primaryField
],
\"params\": {
\"max_length\": 512
}
}"