创建集合
本主题描述了如何在Milvus中创建集合。
集合由一个或多个分区组成。在创建新集合时,Milvus会自动创建一个名为_default
的默认分区。
以下示例构建了一个名为book
的二分片集合,其中包含一个名为book_id
的主键字段,一个名为word_count
的INT64
标量字段,以及一个名为book_intro
的二维浮点向量字段。实际应用可能会使用比示例中更高维度的向量。
准备集合模式定义
要创建的集合必须包含一个主键字段和一个向量字段。主键字段支持INT64和VarChar数据类型。
提示:集合的模式定义类似MYSQL的表结构定义
首先,准备必要的参数,包括字段模式、集合模式和集合名称。
在定义集合模式之前,为集合中的每个字段创建一个模式。为了简化数据插入的复杂性,Milvus允许为每个标量字段(主键字段除外)指定一个默认值。这表明,如果在插入数据时将字段留空,则会使用字段模式创建期间为此字段配置的默认值。
var (
collectionName = "book"
)
schema := &entity.Schema{
CollectionName: collectionName,
Description: "Test book search",
Fields: []*entity.Field{
{
Name: "book_id",
DataType: entity.FieldTypeInt64,
PrimaryKey: true,
AutoID: false,
},
{
Name: "word_count",
DataType: entity.FieldTypeInt64,
PrimaryKey: false,
AutoID: false,
},
{
Name: "book_intro",
DataType: entity.FieldTypeFloatVector,
TypeParams: map[string]string{
"dim": "2",
},
},
},
EnableDynamicField: true
}
类型 | 参数 | 描述 | 选项 |
---|---|---|---|
entity.Schema |
CollectionName |
要创建的集合名称 | N/A |
Description |
要创建的集合的描述 | N/A | |
AutoID |
用于启用或禁用自动ID(主键)分配的开关 | True 或 False |
|
Fields |
要创建的集合中各个字段的模式。有关更多信息,请参见模式 | N/A | |
EnableDynamicField |
是否启用动态模式。有关动态模式的详细信息,请参见动态模式和管理集合的用户指南 | N/A | |
entity.Field |
Name |
要创建的字段名称 | N/A |
PrimaryKey |
该字段是否为主键。主键字段必填 | N/A | |
AutoID |
该字段值是否自动递增。主键字段必填 | N/A | |
Description |
字段的描述 | N/A | |
DataType |
要创建的字段的数据类型 | 对于主键字段:- entity.FieldTypeInt64(numpy.int64) - entity.FieldTypeVarChar(VARCHAR) 对于标量字段:- entity.FieldTypeBool(布尔值) - entity.FieldTypeInt8(numpy.int8) - entity.FieldTypeInt16(numpy.int16) - entity.FieldTypeInt32(numpy.int32) - entity.FieldTypeInt64(numpy.int64) - entity.FieldTypeFloat(numpy.float32) - entity.FieldTypeDouble(numpy.double) - entity.FieldTypeVarChar(VARCHAR) 对于向量字段:- entity.FieldTypeBinaryVector (二进制向量) - entity.FieldTypeFloatVector (浮点向量) |
|
TypeParams |
映射到为特定数据类型设置参数的字符串 | N/A | |
IndexParams |
映射到设置集合索引参数的字符串 | N/A | |
IsDynamic |
此字段是否启用动态模式 | N/A | |
IsPartitionKey |
此字段是否充当分区键 | N/A |
根据结构定义创建集合
然后,使用上面指定的模式创建一个集合。
err = milvusClient.CreateCollection(
context.Background(), // ctx
schema,
2, // shardNum
)
if err != nil {
log.Fatal("无法创建集合:", err.Error())
}
参数 | 描述 | 选项 |
---|---|---|
ctx |
控制API调用过程的上下文 | N/A |
shardNum |
要创建的集合中的分片数 | [1,16] |
集合限制
资源配置
功能 | 最大限制 |
---|---|
集合名称的长度 | 255个字符 |
集合中的分区数 | 4,096 |
集合中的字段数 | 64 |
集合中的分片数 | 16 |
参数 default_value
default_value
仅适用于非数组和非JSON的标量字段。default_value
不适用于主键。default_value
的数据类型必须与dtype
中指定的数据类型相同,否则可能会出现错误。- 如果使用
auto_id
,不允许将所有剩余字段设置为使用默认值。即,在执行插入或更新操作时,您需要为至少一个字段指定值,否则可能会出现错误。
检查集合是否存在
collExists, err := milvusClient.HasCollection(ctx, collectionName)
if err != nil {
log.Fatal("无法检查集合是否存在:", err.Error())
}
删除集合
_ = milvusClient.DropCollection(ctx, collectionName)
查询所有集合
collections, err := milvusClient.ListCollections(ctx)