MilvusのCollectionクラスは、MySQLのテーブルに類似しています。データの整理に使用され、1つ以上のパーティションから構成されています。

Collectionの作成

コレクションは1つ以上のパーティションから構成されています。新しいコレクションを作成する際、Milvusはデフォルトのパーティションとして_defaultという名前のパーティションを作成します。詳細については、用語の説明 - コレクションに関する情報を参照してください。

次の例では、bookという名前のコレクションを作成し、book_idという主キーフィールド、INT64スカラーフィールドであるword_count、および2次元の浮動小数点ベクトルフィールドであるbook_introを含む2つのパーティションを作成します。実際のアプリケーションでは、例よりも高次元のベクトルがよく使用されます。

準備モード

このモードは、MYSQLテーブルの構造を定義するのと似ています。

作成するコレクションには、プライマリキーフィールドとベクトルフィールドを含める必要があります。プライマリキーフィールドはINT64とVarCharのデータ型をサポートしています。

まず、フィールドスキーマ、コレクションスキーマ、およびコレクション名を含む必要なパラメータを準備してください。

コレクションスキーマを定義する前に、コレクション内の各フィールドのスキーマを作成してください。Milvusはデータ挿入の複雑さを減らすため、各スカラーフィールドにデフォルト値を指定することを許可しています(プライマリキーフィールドを除く)。つまり、データを挿入する際にフィールドを空のままにしておくと、フィールドスキーマ作成時に構成されたデフォルト値が使用されます。

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,
  default_value="Unknown"  # デフォルト値は "Unknown"
)
word_count = FieldSchema(
  name="word_count",
  dtype=DataType.INT64,
  default_value=9999  # デフォルト値は 9999
)
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",  # 説明は "Test book search"
  enable_dynamic_field=True  # 動的スキーマを有効にする
)
collection_name = "book"

スキーマタイプ パラメータ 説明 オプション
FieldSchema name 作成するフィールドの名前 N/A
dtype 作成するフィールドのデータ型 プライマリキーフィールド: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) スカラーフィールド: - DataType.BOOL (Boolean) - 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.JSON (JSON) ベクトルフィールド: - BINARY_VECTOR (バイナリベクトル) - FLOAT_VECTOR (浮動小数点数ベクトル)
is_primary フィールドがプライマリキーフィールドであるかどうかを制御するスイッチ。このパラメータはプライマリキーフィールドに対して指定する必要があります。 True または False
auto_id 自動ID(プライマリキー)の割り当てを有効化または無効化するスイッチ。このパラメータはプライマリキーフィールドに対して指定する必要があり、デフォルトは False です。 True または False
max_length (VARCHARフィールドが必要) 挿入可能な文字列の最大長 [1, 65,535]
default_value フィールドのデフォルト値。このパラメータは配列やJSONスカラーフィールドにのみ適用されます。プライマリキーフィールドに対してデフォルト値を指定することはできません。詳細については、default_value パラメータを参照してください。 N/A
dim (ベクトルフィールドが必要) ベクトルの次元 [1, 32,768]
description (任意) フィールドの説明 N/A
CollectionSchema fields コレクションの作成のために作成されるフィールド N/A
description (任意) 作成するコレクションの説明 N/A
enable_dynamic_field 動的スキーマを有効にするかどうか。データ型:ブール値 (true または false)。オプションですが、デフォルトは false です。動的スキーマの詳細については、動的スキーマおよびコレクション管理のユーザーガイドを参照してください。
collection_name 作成するコレクションの名前 N/A

スキーマを使用してコレクションを作成する

次に、指定されたスキーマでコレクションを作成します。

from pymilvus import Collection
collection = Collection(
    name=collection_name,
    schema=schema,
    using='default',
    shards_num=2
    )
パラメータ 説明 オプション
using (オプション) ここでサーバーのエイリアスを指定し、Milvusサーバー内のコレクションを作成する場所を選択します。 N/A
shards_num (オプション) 作成するコレクションのシャード数。 [1,16]
num_partitions (オプション) 作成するコレクションの論理分割数。 [1,4096]
*kwargs: collection.ttl.seconds (オプション) コレクションのTTLはコレクションの有効期限です。期限が切れたコレクション内のデータはクリーンアップされ、検索やクエリに参加しません。TTLを秒単位で指定します。 値は0以上である必要があります。0はTTLを無効にします。

制限事項

リソース構成

機能 最大制限
コレクション名の長さ 255 文字
コレクション内のパーティション数 4,096
コレクション内のフィールド数 64
コレクション内のシャード数 16

default_value パラメータ

  • default_value は、配列ではないJSONスカラーフィールドにのみ適用されます。
  • default_value はプライマリキーには適用されません。
  • default_value のデータ型は、dtype で指定されたデータ型と同じでなければなりません。それ以外の場合、エラーが発生することがあります。
  • auto_id を使用する場合、残りのすべてのフィールドをデフォルト値で設定することは許可されません。つまり、挿入または更新操作を行う際には、少なくとも1つのフィールドの値を指定する必要があります。そうしないと、エラーが発生することがあります。

コレクションの名前を変更する

コレクションの名前を変更したい場合は、コレクションの名前を変更するAPIを使用してMilvusとやり取りできます。このガイドでは、選択したSDKを使用して既存のコレクションの名前を変更する方法を理解するのに役立ちます。

以下のコードスニペットでは、コレクションを作成して old_collection という名前を付け、それを new_collection に変更します。

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
...     FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
...     FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # 出力: True
utility.has_collection("new_collection") # 出力: False

コレクションの変更

現在、TTL機能はPythonでのみ利用可能です。

collection.set_properties(properties={"collection.ttl.seconds": 1800})

上記の例では、コレクションのTTLを1800秒に変更しています。

コレクションの存在を確認する

Milvus内にコレクションが存在するかどうかを確認します。

from pymilvus import utility
utility.has_collection("book")

コレクションの詳細を確認する

from pymilvus import Collection
collection = Collection("book")  # 既存のコレクションを取得します。

collection.schema                # コレクションの CollectionSchema を返します。
collection.description           # コレクションの説明を返します。
collection.name                  # コレクションの名前を返します。
collection.is_empty              # コレクションが空かどうかを示すブール値を返します。
collection.num_entities          # コレクション内のエンティティ数を返します。
collection.primary_field         # プライマリキーフィールドの schema.FieldSchema を返します。
collection.partitions            # [Partition] オブジェクトのリストを返します。
collection.indexes               # [Index] オブジェクトのリストを返します。
collection.properties            # コレクション内のデータの有効期限を返します。

すべてのコレクションをリストする

from pymilvus import utility
utility.list_collections()

コレクションを削除する

from pymilvus import utility
utility.drop_collection("book")

コレクションエイリアスを作成する

from pymilvus import utility
utility.create_alias(
  collection_name = "book",
  alias = "publication"
)

コレクションエイリアスを削除する

from pymilvus import utility
utility.drop_alias(alias = "publication")

コレクションのエイリアスを変更する

既存のエイリアスを別のコレクションを指すように変更します。以下の例は、エイリアス publication がもともと別のコレクションを指すように作成されたシナリオに基づいています。

from pymilvus import utility
utility.alter_alias(
  collection_name = "book",
  alias = "publication"
)

コレクションのロード

検索やクエリ操作を行う前に、コレクションをメモリにロードする方法です。Milvusでは、すべての検索およびクエリ操作がメモリで実行されます。

Milvusでは、ユーザーがコレクションを複数のレプリカとしてロードし、クエリノードの追加のCPUおよびメモリリソースを利用できます。この機能により、ハードウェアを追加することなく、全体的なQPSおよびスループットを向上させることができます。コレクションをロードする前に、それに対してインデックスを作成していることを確認してください。

from pymilvus import Collection, utility

collection = Collection("book")
collection.load(replica_number=2)

utility.load_state("book")

utility.loading_progress("book")

コレクションの解放

検索やクエリ操作の後、メモリ使用量を減らすためにコレクションを解放する方法です。

from pymilvus import Collection
collection = Collection("book") 
collection.release()