MilvusとMindsDBの統合
MindsDBは、AIアプリケーションと多様な企業データソースを統合するための強力なツールです。MindsDBは、構造化データと非構造化データの両方にわたるクエリに丁寧に答えながら、乱立するデータに秩序をもたらす連携クエリエンジンとして機能します。データがSaaSアプリケーション、データベース、またはデータウェアハウスに散らばっていても、MindsDBは標準SQLを使用してすべてを接続し、クエリすることができます。ナレッジベースによる最先端の自律的RAGシステムを備え、数百ものデータソースをサポートし、ローカル開発からクラウド環境まで柔軟なデプロイメントオプションを提供します。
このチュートリアルでは、milvusとMindsDBを統合し、MindsDBのAI機能とMilvusのベクトルデータベース機能をSQLライクな操作で活用し、ベクトル埋め込みデータを管理・照会する方法を紹介します。
このチュートリアルでは、主にMindsDB Milvusハンドラの公式ドキュメントを参照しています。このチュートリアルで古い部分を見つけた場合は、公式ドキュメントに従うことを優先し、issueを作成してください。
MindsDBのインストール
始める前に、DockerまたはDocker Desktop経由でMindsDBをローカルにインストールします。
先に進む前に、MindsDBとMilvusの両方の基本的な概念と操作をしっかりと理解していることを確認してください。
引数の紹介
接続を確立するために必要な引数は以下の通りです:
uri: milvus データベースの uri。ローカルの ".db" ファイル、または docker やクラウドサービスに設定することができます。token: uriオプションに従ってdockerまたはクラウドサービスをサポートするトークン
接続を確立するためのオプションの引数は以下の通り:
これらはSELECT クエリに使用される:
search_default_limitselect 文で渡されるデフォルトの制限値 (default=100)search_metric_type検索に使用するメトリックタイプ (default="L2")search_ignore_growing類似検索時に成長するセグメントを無視するかどうか(default=False)。search_paramssearch_metric_type固有のもの (default={"nprobe": 10})
これらはCREATE クエリで使用されます:
create_auto_idIDを持たないレコードを挿入する際にidを自動生成するかどうか(default=False)。create_id_max_lenテーブル作成時のidフィールドの最大長(default=64)create_embedding_dimテーブル作成時の埋め込みディメンジョン(default=8)create_dynamic_field作成するテーブルに動的フィールドを持たせるかどうか (default=True)create_content_max_lenコンテンツ・カラムの最大長 (default=200)create_content_default_valueコンテンツ・カラムのデフォルト値 (default='')create_schema_description作成されるスキーマの説明 (default='')create_alias作成されたスキーマのエイリアス (default='default')create_index_params埋め込みカラムに作成されるインデックスのパラメータ (default={})create_index_metric_typeインデックスの作成に使われるメトリック (default='L2')create_index_typeインデックスのタイプ (default='AUTOINDEX')
使用法
続行する前に、pymilvus のバージョンがこの固定バージョンと同じであることを確認してください。バージョンの互換性に問題がある場合は、pymilvusのバージョンをロールバックするか、この要件ファイルでカスタマイズしてください。
接続の作成
このハンドラを使用し、MindsDBのMilvusサーバに接続するには、以下の構文を使用します:
CREATE DATABASE milvus_datasource
WITH
ENGINE = 'milvus',
PARAMETERS = {
"uri": "./milvus_local.db",
"token": "",
"create_embedding_dim": 3,
"create_auto_id": true
};
- 小規模なデータやプロトタイピングのためにローカルのベクターデータベースが必要なだけであれば、uri をローカルファイル、例えば
./milvus.dbに設定するのが最も便利な方法です。- より大規模なデータやトラフィックを本番環境で利用する場合は、DockerやKubernetes上にMilvusサーバを構築することができます。
http://localhost:19530このセットアップでは、サーバのアドレスとポートをuriとして使用してください。Milvusで認証機能を有効にしている場合は、tokenを"<your_username>:<your_password>"としてください。そうでない場合は、トークンを設定する必要はありません。- Zillizクラウド上でフルマネージドMilvusを利用することも可能です。
uriとtokenにZilliz CloudインスタンスのPublic EndpointとAPIキーを設定するだけです。
接続の切断
接続を切断するには、以下のコマンドを使用します。
DROP DATABASE milvus_datasource;
テーブルの作成
既存のテーブルからデータを挿入するには、次のコマンドを使用します。CREATE
CREATE TABLE milvus_datasource.test
(SELECT * FROM sqlitedb.test);
コレクションの削除
コレクションの削除はサポートされていません。
クエリと選択
検索ベクトルを使用してデータベースに問い合わせるには、WHERE 節でsearch_vector を使用します。
注意:
- もし、
LIMITを省略した場合、Milvusが要求しているため、search_default_limitが使用されます。 - メタデータカラムはサポートされていませんが、コレクションがダイナミックスキーマを有効にしている場合、通常のクエリが可能です。
- 動的フィールドは表示できませんが、クエリは可能です。
SELECT * from milvus_datasource.test
WHERE search_vector = '[3.0, 1.0, 2.0, 4.5]'
LIMIT 10;
search_vector を省略すると、基本検索になり、LIMIT またはsearch_default_limit コレクションのエントリ数が返されます。
SELECT * from milvus_datasource.test
通常のSQLのように、動的フィールドでWHERE 節を使用することができます。
SELECT * FROM milvus_datasource.createtest
WHERE category = "science";
レコードの削除
SQLと同様に、DELETE を使用してエントリを削除できます。
注意:
- Milvusは明確に指定された主キーを持つエンティティの削除のみをサポートします。
IN演算子しか使用できません。
DELETE FROM milvus_datasource.test
WHERE id IN (1, 2, 3);
レコードの挿入
このように個々の行を挿入することもできます:
INSERT INTO milvus_test.testable (id,content,metadata,embeddings)
VALUES ("id3", 'this is a test', '{"test": "test"}', '[1.0, 8.0, 9.0]');
更新
レコードの更新はMilvus APIではサポートされていません。DELETE とINSERT
詳細および例についてはMindsDB Official Documentation を参照してください。