Milvusとの仕事
Milvusでコレクションを作成する
Milvus では、コレクションはエンティティの保存と管理に使用されます。 Milvus におけるコレクションは、リレーショナルデータベース管理システム(RDBMS)におけるテーブルに相当します。
Milvus でコレクションを作成するには、 「コレクションの作成」 を参照してください。
Milvusにデータを挿入する
Milvusは、主キーフィールドを除くスカラフィールドのデフォルト値をサポートしています。 データ挿入時に一部のフィールドを空のままにしておくことができます。
詳細については、エントリを挿入。
以下の理由から、データを一括して挿入することをお勧めします:
-
1回のGRPC API呼び出しで取り込むことができるベクトルの数は、許可されている最大メッセージサイズによって制限されます。Kafka。 IBM Cloudでは、メッセージ・サイズの最大制限は 1 MB に制限されています。
-
一度に挿入できる行の最大数は、取り込もうとしているデータの合計サイズによって異なります。 正確な数は、ベクトルの次元の増加と、行内の非ベクトル・フィールドの存在によって減少します。
500,000 個を超えるベクトルを持つデータ・セットを挿入するには、一括挿入 API を使用します。 バルク挿入 API は、より大きなデータ・セットを取り込むときに、バッチ挿入 API よりもパフォーマンスが優れています。 .npyファイルを使用することは、大量のデータセットを取り込むための推奨される方法です。 バッチ挿入 API を使用している場合は、500,000 行ごとにコレクションを手動でフラッシュします。 詳細については、一括挿入 API。
Milvusでインデックスを作成する
Milvusで近似最近傍探索(ANN)検索を行う前にインデックスを作成します。
IBM は、以下の索引を正式にサポートしています。
このリストにリストされていない索引は機能する可能性がありますが、 IBMによって検証されません。
セグメント内の行数が1024未満の場合、 Milvus はそのセグメントに対してインデックスを作成しません。 代わりに、クエリ操作にはデフォルトで brute-force
検索が使用されます。 セグメント内の行数がこの閾値を超えると Milvusは自動的にインデックスの構築を開始します。
- HNSW (ソフトウェア)
- SCANN (カナダ)
- FLAT
- IF_FLAT
- IVF_PQ (P)
ベクトル・フィールド名および指標パラメーターを指定することによって、指標を作成することができます。 詳細については、インデックスベクトルフィールド。
Milvusでベクトル類似検索を行う
Milvusでは、検索シナリオのパラメータを準備した後、ベクトル類似性検索を実行できます。
- 単一ベクトル検索と複数ベクトル検索の詳細については、以下を参照してください。ベクトル類似性検索。
- ハイブリッド(マルチベクトル)検索の詳細については、以下を参照してください。ハイブリッド検索。
- ハイブリッド検索と GroupBy 検索の詳細については 、「ハイブリッド GroupBy 検索」の 「 GroupBy の拡張機能」セクションをご覧ください。
Milvusにおけるスカラーフィルタリングに基づくクエリの実行
Milvus では、スカラーフィルタリングに基づくクエリを実行できます。 詳細については、スカラークエリを取得。
次の検索タイプを実行できます。
- 範囲検索: クエリ ベクトルから特定の距離範囲内のベクトルを検索します。 詳細については、範囲検索。
- グループ化検索: 特定のフィールドに基づいて結果を取得し、結果の多様性を確保します。 詳細については、グループ化検索。
大規模なデータ・セットに対してスカラー・フィルタリングを使用して検索照会を実行する場合は、照会結果を効果的に管理するために制限パラメーターを調整することが重要です。 以下の方法で設定します limit
パラメータ:
hello_milvus.query(expr=query_condition, output_fields=["random", "embeddings"], limit=100,offset=0)
の値の合計 limit
そして offset
パラメータは、[ 1, 16384] 。
Milvus から主キーを使用してエンティティを削除する
Milvus では、主キーを使用してエンティティを削除することができます。 削除するエンティティをフィルタリングするブール式を準備します。
詳しくは、 エンティティーの削除 を参照してください。
Milvusからコレクションを落とす
Milvusからコレクションを削除すると、元に戻すことはできません。 削除されたデータをリカバリーすることはできません。
.ipynb
またはPythonスクリプトに以下を追加して、コレクションをドロップする。
from pymilvus import utility
utility.drop_collection(<collection name>)
ベスト・プラクティス
以下にいくつかのベストプラクティスを示します。
- Varchar型のフィールドが長い場合(256文字以上)、ベクトル以外のフィールドMilvus の外に置いてください。 これらを COS バケットまたはストレージ バケットに保存し、参照検索を実行できます。
- 必ずPyMilvusバージョンは2.4.0またはそれ以降。 Milvus 2.4.0 以降のバージョンでは、スパースベクトル検索、ハイブリッド検索(
sparse_dense
)、およびマルチベクトル検索。 - バッチ挿入を使用してコレクションをロードするときは、バッチで挿入し、メモリを解放してから、プロセスを繰り返します。
- すべてのコレクションを一度に並行して取り込まないでください。 連続的に取り込み、取り込みの合間にフラッシュします。
- 各コレクションの最大サイズは、T シャツのサイズでサポートされるベクターの最大数に対応している必要があります。
- 複数のコレクションまたはパーティションがロードされている場合は、ロードされているすべてのエンティティのベクタの合計がTシャツのサイズの制限を超えないようにしてください。 ロードされるベクトルの数が制限内であれば、T シャツのサイズ制限より多くのベクトルを保存できます。
Milvusのアップグレード中は、約20秒間、応答に若干の遅延が発生する場合があります。 進行中の検索やアップサート・クエリーが失敗する可能性がある。 クエリーはすぐに再試行できる。
ノートブックの見本 Milvus
これらのサンプルノートブックでは、ステップバイステップのチュートリアルで Milvus の機能を試すことができます。 サンプルノートブックにアクセスするには 、「 Milvus のサンプルノートブック」 をご覧ください。