创建集合(create_collection)

创建集合

本主题介绍了如何在Milvus中创建集合。

集合由一个或多个分区组成。在创建新集合时,Milvus会创建一个默认分区_default。有关更多信息,请参见术语表 - 集合

以下示例构建了一个两个分片的集合,名为book,具有名为book_id的主键字段,名为word_countINT64标量字段和名为book_intro的二维浮点向量字段。实际应用程序通常使用比示例更高维度的向量。

准备模式

需要创建的集合必须包含一个主键字段和一个向量字段。INT64和String是主键字段支持的数据类型。

首先,准备必要的参数,包括字段模式、集合模式和集合名称。

Python Java 前往 Node.js 命令行界面 Curl

from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
  name="book_id",
  dtype=DataType.INT64,
  is_primary=True,
)
book_name = FieldSchema(
  name="book_name",
  dtype=DataType.VARCHAR,
  max_length=200,
)
word_count = FieldSchema(
  name="word_count",
  dtype=DataType.INT64,
)
book_intro = FieldSchema(
  name="book_intro",
  dtype=DataType.FLOAT_VECTOR,
  dim=2
)
schema = CollectionSchema(
  fields=[book_id, book_name, word_count, book_intro],
  description="Test book search"
)
collection_name = "book"
 
import { DataType } from "@zilliz/milvus2-sdk-node";
const params = {
  collection_name: "book",
  description: "Test book search",
  fields: [
    {
      name: "book_intro",
      description: "",
      data_type: DataType.FloatVector,
      dim: 2,
    },
    {
      name: "book_id",
      data_type: DataType.Int64,
      is_primary_key: true,
      description: "",
    },
    {
      name: "book_name",
      data_type: DataType.VarChar,
      max_length: 256,
      description: "",
    },
    {
      name: "word_count",
      data_type: DataType.Int64,
      description: "",
    },
  ],
};
 
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",
      },
    },
  },
}
 
FieldType fieldType1 = FieldType.newBuilder()
        .withName("book_id")
        .withDataType(DataType.Int64)
        .withPrimaryKey(true)
        .withAutoID(false)
        .build();
FieldType fieldType2 = FieldType.newBuilder()
        .withName("word_count")
        .withDataType(DataType.Int64)
        .build();
FieldType fieldType3 = FieldType.newBuilder()
        .withName("book_intro")
        .withDataType(DataType.FloatVector)
        .withDimension(2)
        .build();
CreateCollectionParam createCollectionReq = CreateCollectionParam.newBuilder()
        .withCollectionName("book")
        .withDescription("Test book search")
        .withShardsNum(2)
        .addFieldType(fieldType1)
        .addFieldType(fieldType2)
        .addFieldType(fieldType3)
        .build();
 
create collection -c book -f book_id:INT64:book_id -f word_count:INT64:word_count -f book_intro:FLOAT_VECTOR:2 -p book_id
 
curl -X 'POST' 
  'http://localhost:9091/api/v1/collection' 
  -H 'accept: application/json' 
  -H 'Content-Type: application/json' 
  -d '{
    "collection_name": "book",
    "schema": {
      "autoID": false,
      "description": "Test book search",
      "fields": [
        {
          "name": "book_id",
          "description": "book id",
          "is_primary_key": true,
          "autoID": false,
          "data_type": 5
        },
        {
          "name": "word_count",
          "description": "count of words",
          "is_primary_key": false,
          "data_type": 5
        },
        {
          "name": "book_intro",
          "description": "embedded vector of book introduction",
          "data_type": 101,
          "is_primary_key": false,
          "type_params": [
            {
              "key": "dim",
              "value": "2"
            }
          ]
        }
      ],
      "name": "book"
    }
  }'
 

Output:

{}
 

非常感谢您的纠正和耐心指导,我很抱歉之前没有整理出正确的表格。以下是根据您的指导进行修正的表格:

参数描述选项
FieldSchema要创建的集合中字段的模式。有关更多信息,请参见模式N/A
name要创建的字段的名称。N/A
dtype要创建的字段的数据类型。对于主键字段:DataType.INT64 (numpy.int64) 或 DataType.VARCHAR (VARCHAR);对于标量字段:DataType.BOOL (布尔值)、DataType.INT8 (numpy.int8)、DataType.INT16 (numpy.int16)、DataType.INT32 (numpy.int32)、DataType.INT64 (numpy.int64)、DataType.FLOAT (numpy.float32)、DataType.DOUBLE (numpy.double) 或 DataType.VARCHAR (VARCHAR);对于向量字段:DataType.BINARY_VECTOR (二进制向量) 或 DataType.FLOAT_VECTOR (浮点向量)。
is_primary(主键字段必需)用于控制字段是否为主键字段的开关。TrueFalse
auto_id(主键字段必需)用于启用或禁用自动ID(主键)分配的开关。TrueFalse
max_length(VARCHAR字段必需)允许插入的字符串的最大长度。[1, 65,535]
dim(向量字段必需)向量的维度。[1, 32,768]
description(可选)字段的描述信息。N/A
参数描述选项
CollectionSchema要创建的集合的模式。有关更多信息,请参见模式N/A
fields要创建的集合的字段。N/A
description(可选)要创建的集合的描述信息。N/A
collection_name要创建的集合的名称。N/A
参数描述选项
collectionName要创建的集合的名称。N/A
description要创建的集合的描述信息。N/A
Fields要创建的集合中字段的模式。有关更多信息,请参见模式N/A
Name要创建的字段的名称。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 (浮点向量)。
PrimaryKey(主键字段必需)用于控制字段是否为主键字段的开关。TrueFalse
AutoID(主键字段必需)用于启用或禁用自动ID(主键)分配的开关。TrueFalse
dim(向量字段必需)向量的维度。[1, 32768]
参数描述选项
collection_name要创建的集合的名称。
description要创建的集合的描述。
fields要创建的字段和集合的模式。有关更多信息,请参阅模式
data_type要创建的字段的数据类型。有关更多信息,请参阅数据类型参考编号 (opens in a new tab)
is_primary_key(主键字段必填)用于控制字段是否为主键字段的开关。truefalse
autoID用于启用或禁用自动生成的 ID(主键)分配的开关。truefalse
dim(向量字段必填)向量的维度。[1, 32,768]
max_length (VarChar 字段必填)字符串字段最大长度。[1, 32,768]
description (可选)字段的描述。
参数描述选项
Name要创建的字段的名称。
Description要创建的字段的描述。
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 (浮点向量)。
PrimaryKey(主键字段必填)用于控制字段是否为主键字段的开关。TrueFalse
AutoID(自动生成的 ID)用于启用或禁用自动生成的 ID(主键)分配的开关。TrueFalse
Dimension(向量字段必填)向量的维度。[1, 32,768]
CollectionName要创建的集合的名称。
Description (可选)要创建的集合的描述。
ShardsNum要创建的集合的分片数。[1, 64]
选项描述
-c集合的名称。
-f(多个)字段模式的字符串,格式为<字段名称>:<数据类型>:<向量分量数/描述>
-p主键字段的名称。
-a(可选)用于启用或禁用自动生成的 ID。
-d(可选)集合的描述。
参数描述选项
collection_name要创建的集合的名称。
name (schema)必须与 collection_name 相同,这个重复的字段是为了历史原因而保留的。collection_name 相同
autoID (schema)用于启用或禁用自动生成的 ID(主键)分配。TrueFalse
description (schema)要创建的集合的描述。
fields要创建的集合中字段的结构。有关更多信息,请参阅模式
name(field)要创建的字段的名称。
description (field)要创建的字段的描述。
is_primary_key(主键字段必填)用于控制字段是否为主键字段的开关。truefalse
autoID (field)(主键字段必填)用于启用或禁用自动生成的 ID(主键)分配的开关。truefalse
data_type要创建的字段的数据类型。枚举项:1:“Bool”2:“Int8”3:“Int16”4:“Int32”5:“Int64”10:“Float”11:“Double”20:“String”21:“VarChar”100:“BinaryVector”101:“FloatVector”。对于主键字段,数据类型可以是 DataType.INT64 (numpy.int64)或 DataType.VARCHAR (VARCHAR)。对于标量字段,数据类型可以是 DataType.BOOL (布尔)、DataType.INT64 (numpy.int64)、DataType.FLOAT (numpy.float32)、DataType.DOUBLE (numpy.double)。对于向量字段,数据类型可以是 BINARY_VECTOR (二进制向量)或 FLOAT_VECTOR (浮点向量)。
dim (向量字段必填)向量的维度。[1, 32,768]

创建带有上述指定模式的集合

然后,使用您上面指定的模式创建集合。

Python Java GO Node.js CLI Curl

from pymilvus import Collection
collection = Collection(
    name=collection_name,
    schema=schema,
    using='default',
    shards_num=2
    )
 
await milvusClient.createCollection(params);
 
err = milvusClient.CreateCollection(
    context.Background(), // ctx
    schema,
    2, // shardNum
)
if err != nil {
    log.Fatal("failed to create collection:", err.Error())
}
 
milvusClient.createCollection(createCollectionReq);
 
# Follow the previous step.
 
# Follow the previous step.
 

以下是第一个表格的中文翻译:

参数描述选项
using (可选)通过在此处指定服务器别名,可以选择在哪个 Milvus 服务器上创建集合。
shards_num (可选)要创建的集合的分片数。[1, 256]
properties: collection.ttl.seconds (可选)集合生存时间(TTL)是集合的到期时间。过期的数据将被清理,并不会参与搜索或查询。以秒为单位指定 TTL。值应为0或更大。 0表示TTL已禁用。

以下是第二个表格的中文翻译:

参数描述选项
ctx控制 API 调用过程的上下文。
shardNum要创建的集合的分片数。[1, 256]

限制

功能最大限制
集合名称的长度255 个字符
集合中的分区数量4,096
集合中的字段数量64
集合中的分片数量256

接下来要做什么