外部コレクションのスキーマを変更するCompatible with Milvus 3.0.x

外部コレクションを作成した後、外部データソースはしばしば変更されます。たとえば、すでに埋め込みデータを格納しているレイクハウステーブルに、後でスコア、カテゴリ、タイムスタンプなどの新しいスカラーフィールドが追加され、それらをクエリ結果として返したり、フィルタで使用したりしたい場合があります。

外部コレクションを再作成したり、ソースデータをMilvusにコピーしたりする代わりに、外部データソースの既存のフィールドに対応するMilvusフィールドを追加します。フィールドを追加した後、外部コレクションを更新することで、クエリや検索で新しいフィールドを使用できるようになります。

制限事項

  • 外部コレクションでは現在、作成後のフィールド追加がサポートされています。フィールドの削除、フィールド名の変更、フィールドのデータ型の変更、ベクトルの次元の変更、external_field の再マッピングなど、その他のスキーマ変更はサポートされていません。

  • 追加できるのは、外部データソースにすでに存在するフィールドのみです。この操作では、既存の外部フィールドをMilvusフィールドにマッピングします。外部データソースに新しいフィールドを作成したり、ソースデータをバックフィルしたりすることはありません。

  • 既存の外部コレクションへのSPARSE_FLOAT_VECTOR フィールドの追加はサポートされていません。

  • 既存の外部コレクションへの StructArray フィールドの追加はサポートされていません。外部コレクションに StructArray フィールドが必要な場合は、コレクションの作成時にコレクションスキーマ内で定義してください。

フィールドの追加

外部コレクションにフィールドを追加する前に、そのフィールドが外部データソースにすでに存在することを確認してください。その後、add_collection_field() を呼び出し、external_field を外部データソースのフィールド名に設定することで、そのフィールドをMilvusで公開します。data_type には、外部データソースのフィールドに一致するMilvusのデータ型を設定します。たとえば、マッピングされたフィールドが倍精度値を格納している場合は、DataType.DOUBLE を使用します。

マネージドコレクションとは異なり、追加されたフィールドの値は、外部コレクションを更新した後に外部データソースから読み込まれます。

スカラーフィールドの追加

クエリ結果にフィールドを返したり、フィルタで使用したりする場合は、add_collection_field() を使用してスカラーフィールドを追加します。次の例では、外部データソースの `score ` フィールドにマッピングされる `score ` フィールドを追加しています。

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

client.add_collection_field(
    collection_name="product_embeddings",
    field_name="score",
    data_type=DataType.DOUBLE,
    nullable=True,
    external_field="score",
)

この例では、score が Milvus のフィールド名であり、external_field="score" は外部データソースのscore フィールドにマッピングされます。コレクションがすでに作成された後にフィールドが追加されるため、nullable=True を設定します。

ベクトルフィールドの追加

外部データソースにベクトル値がすでに含まれている場合は、ベクトルフィールドを追加することもできます。外部データソースのベクトルフィールドに合わせて、ベクトルdata_type およびdim を設定します。

次の例では、image_embedding_v2 という名前の密ベクトルフィールドを追加しています。

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

client.add_collection_field(
    collection_name="product_embeddings",
    field_name="image_embedding_v2",
    data_type=DataType.FLOAT_VECTOR,
    dim=768,
    nullable=True,
    external_field="image_embedding_v2",
)

追加したベクトルフィールドに対してベクトル検索を実行する予定がある場合は、外部コレクションを更新する前に、そのフィールドのインデックスを作成してください。

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="image_embedding_v2",
    index_type="AUTOINDEX",
    metric_type="COSINE",
)

client.create_index(
    collection_name="product_embeddings",
    index_params=index_params,
)

外部コレクションの更新

外部コレクションのスキーマを変更した後は、外部コレクションを更新して、Milvus が外部コレクションのメタデータを更新し、クエリ、検索、およびフィルタの結果にスキーマの変更が反映されるようにしてください。

client.refresh_external_collection(
    collection_name="product_embeddings"
)

翻訳DeepL

マネージド Milvus を無料で試す

Zilliz Cloud は手間いらず、Milvus を基盤に 10 倍高速です。

始める
フィードバック

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