模式(schema)

本主题介绍Milvus中的模式。 模式用于定义集合和其中的字段的属性。

字段模式

字段模式是字段的逻辑定义。在定义集合模式创建集合之前,首先需要定义字段模式。

Milvus仅支持集合中的一个主键字段。

字段模式属性

| 属性

说明注释
name要在集合中创建的字段名称数据类型:字符串。必填项
dtype字段的数据类型必填项
description字段的描述数据类型:字符串。可选
is_primary是否将该字段设置为主键字段数据类型:布尔(truefalse)。主键字段的必填项
维度向量的维度数据类型:整数 ∈[1, 32768]。向量字段的必填项

创建字段模式

from pymilvus import FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="主键ID")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="年龄")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="向量")
 

支持的数据类型

DataType定义了字段包含的数据类型。不同的字段支持不同的数据类型。

  • 主键字段支持:
    • INT64:numpy.int64
    • VARCHAR:字符串类型
  • 标量字段支持:
    • BOOL:布尔类型(truefalse

    • INT8:numpy.int8

    • INT16:numpy.int16

    • INT32:numpy.int32

    • INT64:numpy.int64

    • FLOAT:numpy.float32

    • DOUBLE:numpy.double

    • VARCHAR:字符串类型

  • 向量字段支持:
    • BINARY_VECTOR:二进制向量
    • FLOAT_VECTOR:浮点向量

集合模式

集合模式是集合的逻辑定义。通常在定义字段模式和创建集合之前需要定义集合模式。

集合模式属性

| 属性

说明注释
name要在集合中创建的字段必填项
description集合的描述数据类型:字符串。可选
auto_id是否启用自动ID(主键)分配数据类型:布尔(truefalse)。可选

创建集合架构

在定义集合模式之前,先定义字段模式。

from pymilvus import FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="主键ID")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="年龄")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="向量")
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, description="集合描述")
 

使用指定的架构创建集合:

from pymilvus import Collection
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
 

您可以使用shards_num定义分片数,并通过在using中指定别名来创建Milvus服务器中的集合。

您还可以使用Collection.construct_from_dataframe创建集合,该方法可以从DataFrame自动生成集合模式并创建集合。

import pandas as pd
df = pd.DataFrame({
        "id": [i for i in range(nb)],
        "age": [random.randint(20, 40) for i in range(nb)],
        "embedding": [[random.random() for _ in range(dim)] for _ in range(nb)]
    })
collection, ins_res = Collection.construct_from_dataframe(
                                'my_collection',
                                df,
                                primary_field='id',
                                auto_id=False
                                )
 

下一步