Milvus のコレクションは、リレーショナルデータベースのテーブルに似ています。これらは、ベクトルデータとそれに関連するスカラーメタデータを整理および管理するための基本的な単位です。インデックス、パーティション、およびシャードを設定することで、データ処理フローをカスタマイズできます。これにより、データインジェスチョン、ストレージ、クエリ、および分析のためのエンドツーエンドのソリューションを作成できます。
前提条件
ローカルクライアントに PyMilvus ライブラリをインストールし、最新バージョンに更新していること。
PyMilvus ライブラリをインストールしていない場合、または更新する必要がある場合は、次のコマンドを実行します。
pip install --upgrade pymilvusMilvus インスタンスを作成していること。詳細については、「Milvus インスタンスの作成」をご参照ください。
コレクションの作成
コレクションのクイック作成
名前とベクトルディメンションを指定することで、コレクションをクイック作成できます。
from pymilvus import MilvusClient
# Milvus クライアントを作成します。
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # Milvus インスタンスのパブリックエンドポイント。
token="<yourUsername>:<yourPassword>", # Milvus インスタンスのユーザー名とパスワード。
db_name="default" # 接続するデータベースの名前。この例では、デフォルトのデータベースを使用します。
)
# milvus_collection という名前のコレクションを作成します。
client.create_collection(
collection_name="milvus_collection",
dimension=5
)
res = client.get_load_state(
collection_name="milvus_collection"
)
# コレクションの現在の読み込みステータスを返します。
print(res)
このコードは、`id` (プライマリキー) と `vector` (ベクトルフィールド) の 2 つのフィールドのみを持つコレクションを作成します。`auto_id` と `enable_dynamic_field` プロパティはデフォルトで有効になっています。
auto_id: このプロパティを有効にすると、Milvus は各レコードに自動インクリメントのプライマリキーを自動的に割り当てます。プライマリキーの値を設定する必要はありません。enable_dynamic_field: このプロパティを有効にすると、事前定義された `id` および `vector` フィールド以外のフィールドは動的フィールドとして扱われます。これらは、$metaという名前の特別なフィールドにキーと値のペアとして格納されます。このプロパティを使用すると、スキーマで定義されていないフィールドのデータを挿入できます。
これらの設定により、すべてのフィールドを事前に定義することなく、データを柔軟に挿入および管理できます。
カスタムコレクションの作成
カスタムコレクションを作成する際に、スキーマとインデックスパラメーターを指定できます。
from pymilvus import MilvusClient, DataType, time
# Milvus クライアントを作成します。
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # Milvus インスタンスのインターネットアクセス可能なアドレス。
token="<yourUsername>:<yourPassword>", # Milvus インスタンスにログインするためのユーザー名とパスワード。
db_name="default" # 接続するデータベースの名前。この例では、デフォルトのデータベースを使用します。
)
# スキーマを作成します。
schema = MilvusClient.create_schema(
auto_id=False, # 自動 ID 生成を無効にします。
enable_dynamic_field=True, # 動的フィールドを有効にします。
)
# スキーマフィールドを追加します。
# test_id という名前の INT64 フィールドをプライマリキーとして追加します。
schema.add_field(field_name="test_id", datatype=DataType.INT64, is_primary=True)
# test_vector という名前の 768 次元の浮動小数点ベクトルフィールドを追加します。
schema.add_field(field_name="test_vector", datatype=DataType.FLOAT_VECTOR, dim=768)
# インデックスパラメーターを定義します。
index_params = client.prepare_index_params()
# インデックスを追加します。
index_params.add_index(
field_name="test_id",
index_type="STL_SORT" # インデックスタイプを設定します。
)
index_params.add_index(
field_name="test_vector",
index_type="IVF_SQ8", # インデックスタイプを設定します。
metric_type="L2", # L2 などのメトリックタイプを設定します。
params={"nlist": 128}
)
# 指定されたスキーマとインデックスでコレクションを作成します。
client.create_collection(
collection_name="milvus_collection", # milvus_collection という名前のコレクションを作成します。
schema=schema,
index_params=index_params
)
time.sleep(5)
res = client.get_load_state(
collection_name="milvus_collection"
)
print(res)
コレクションとインデックスを別々に作成することもできます。次のコードは一例です。
# milvus_collection1 という名前のコレクションを作成します。
client.create_collection(
collection_name="milvus_collection1",
schema=schema,
)
# milvus_collection1 の読み込みステータスをクエリします。
res = client.get_load_state(
collection_name="milvus_collection1"
)
print(res)
# milvus_collection1 のインデックスを作成します。
client.create_index(
collection_name="milvus_collection1",
index_params=index_params
)
# インデックス作成後の milvus_collection1 の読み込みステータスをクエリします。
res = client.get_load_state(
collection_name="milvus_collection1"
)
print(res)コレクションの表示
コレクションの詳細を表示できます。
res = client.describe_collection(collection_name="milvus_collection") print(res)現在のデータベース内のすべてのコレクションを表示できます。
res = client.list_collections() print(res)
コレクションの読み込みと解放
コレクションを読み込むと、Milvus は関連するインデックスファイルをメモリに読み込みます。コレクションを解放すると、Milvus はインデックスファイルをメモリからアンロードします。検索を実行する前に、コレクションをメモリに読み込む必要があります。
コレクションの読み込み
client.load_collection(
collection_name="milvus_collection"
)
res = client.get_load_state(
collection_name="milvus_collection"
)
print(res)
コレクションの解放
client.release_collection(
collection_name="milvus_collection"
)
res = client.get_load_state(
collection_name="milvus_collection"
)
print(res)
コレクションの削除
client.drop_collection(
collection_name="milvus_collection"
)
client.drop_collection(
collection_name="milvus_collection1"
)