milvus-logo
LFAI
フロントページへ
  • ユーザーガイド

スキーマの管理

このトピックではMilvusにおけるスキーマについて紹介します。スキーマはコレクションとその中のフィールドのプロパティを定義するために使用されます。

フィールドスキーマ

フィールドスキーマはフィールドの論理的定義です。コレクションスキーマを定義し、コレクションを管理する前に最初に定義する必要があります。

Milvusはコレクション内の主キーフィールドを1つだけサポートしています。

フィールドスキーマプロパティ

プロパティ 説明 備考
name 作成するコレクション内のフィールド名 データ型:
必須
dtype フィールドのデータ型 必須
description フィールドの説明 データ型:
任意
is_primary フィールドを主キーフィールドとして設定するかどうか。 データ型:ブール値(true またはfalse )。
主キーフィールドには必須。
auto_id (主キー・フィールドの場合は必須) ID(主キー)の自動割り当てを有効または無効にするスイッチ。 True またはFalse
max_length (VARCHARフィールドでは必須)。 挿入可能な文字列の最大バイト長。マルチバイト文字(Unicode文字など)はそれぞれ1バイト以上を占めることがあるので、挿入される文字列のバイト長が指定された上限を超えないようにしてください。 [1, 65,535]
dim ベクトルの次元 データ型:
密なベクトル・フィールドでは必須。疎なベクトル・フィールドでは省略。
is_partition_key このフィールドがパーティション・キー・フィールドであるかどうか。 データ型:Boolean (true またはfalse)。

フィールド・スキーマの作成

データ挿入の複雑さを軽減するために、Milvusではフィールドスキーマ作成時に、プライマリキーフィールドを除く各スカラーフィールドのデフォルト値を指定することができます。これは、データ挿入時にフィールドを空のままにした場合、このフィールドに指定したデフォルト値が適用されることを示します。

通常のフィールド・スキーマを作成する:

from pymilvus import DataType, FieldSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")

# The following creates a field and use it as the partition key
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)

デフォルト・フィールド値を持つフィールド・スキーマを作成します:

from pymilvus import DataType, FieldSchema

fields = [
  FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
  # configure default value `25` for field `age`
  FieldSchema(name="age", dtype=DataType.INT64, default_value=25, description="age"),
  embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")
]

サポートされるデータ型

DataType は、フィールドに含まれるデータの種類を定義します。フィールドによってサポートするデータ型が異なります。

  • 主キーフィールドは以下のデータ型をサポートします:

    • INT64: numpy.int64
    • varchar: varchar
  • スカラーフィールドがサポートします:

    • BOOL: ブーリアン (true またはfalse)
    • INT8: numpy.int8
    • INT16: numpy.int16
    • INT32: numpy.int32
    • INT64: numpy.int64
    • FLOAT: numpy.float32
    • DOUBLE: numpy.double
    • varchar: varchar
    • JSON:JSON
    • 配列:配列

    複合データ型としてのJSONが利用できます。JSONフィールドはキーと値のペアで構成される。各キーは文字列で、値は数値、文字列、ブーリアン値、配列、リストのいずれかです。詳細はJSON: a new data typeを参照。

  • ベクター・フィールドのサポート

    • BINARY_VECTOR:バイナリ・データを0と1のシーケンスとして格納し、画像処理や情報検索でコンパクトな特徴表現に使用される。
    • FLOAT_VECTOR:32ビット浮動小数点数を格納。科学計算や機械学習で実数を表現する際によく使用される。
    • FLOAT16_VECTOR:16ビットの半精度浮動小数点数を格納し、ディープラーニングやGPU計算でメモリと帯域幅の効率化のために使用されます。
    • BFLOAT16_VECTOR:精度を落とした16ビット浮動小数点数を格納しますが、指数範囲はFloat32と同じで、精度に大きな影響を与えることなくメモリと計算量を削減するためにディープラーニングでよく使用されます。
    • SPARSE_FLOAT_VECTOR: スパース・ベクトルを表現するために使用される、非ゼロ要素とそれに対応するインデックスのリストを格納する。詳細はスパースベクタを参照してください。

    Milvusはコレクション内の複数のベクトルフィールドをサポートしています。詳細はハイブリッド検索を参照。

コレクションスキーマ

コレクションスキーマはコレクションの論理的定義です。通常、コレクションスキーマを定義してコレクションを管理する前に、フィールドスキーマを定義する必要があります。

コレクションスキーマのプロパティ

プロパティ 説明 注釈
field 作成するコレクション内のフィールド 必須
description コレクションの説明 データ型:
オプション
partition_key_field パーティション・キーとして機能するように設計されたフィールドの名前。 データ型:
オプション
enable_dynamic_field ダイナミック・スキーマを有効にするかどうか。 データ型:true false
オプション、デフォルトは 。 ダイナミック・スキーマの詳細については、False
ダイナミック・スキーマおよびコレクションを管理するためのユーザー・ガイドを参照してください。

コレクションスキーマの作成

コレクションスキーマを定義する前に、フィールドスキーマを定義します。
from pymilvus import DataType, FieldSchema, CollectionSchema
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, description="primary id")
age_field = FieldSchema(name="age", dtype=DataType.INT64, description="age")
embedding_field = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128, description="vector")

# Enable partition key on a field if you need to implement multi-tenancy based on the partition-key field
position_field = FieldSchema(name="position", dtype=DataType.VARCHAR, max_length=256, is_partition_key=True)

# Set enable_dynamic_field to True if you need to use dynamic fields. 
schema = CollectionSchema(fields=[id_field, age_field, embedding_field], auto_id=False, enable_dynamic_field=True, description="desc of a collection")

スキーマを指定してコレクションを作成します:

from pymilvus import Collection, connections
conn = connections.connect(host="127.0.0.1", port=19530)
collection_name1 = "tutorial_1"
collection1 = Collection(name=collection_name1, schema=schema, using='default', shards_num=2)
  • shards_num でシャード番号を定義できます。
  • using でエイリアスを指定して、コレクションを作成するMilvusサーバーを定義できます。
  • パーティションキーベースのマルチテナンシーを実装する必要がある場合、is_partition_keyTrue に設定することで、フィールドのパーティションキー機能を有効にできます。
  • 動的フィールドを有効にする必要がある場合、コレクションスキーマでenable_dynamic_fieldTrue に設定することで、動的スキーマを有効にできます。


また、Collection.construct_from_dataframe を使用してコレクションを作成することもできます。これは、DataFrameからコレクション・スキーマを自動的に生成し、コレクションを作成します。

from pymilvus import Collection
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)],
    "position": "test_pos"
})

collection, ins_res = Collection.construct_from_dataframe(
    'my_collection',
    df,
    primary_field='id',
    auto_id=False
    )

次のページ

翻訳DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?