DBAPIによるMilvusベクトルデータベースへの接続:HTTPエグゼキューターパラメータマッピングの実践
Milvusとは?
Milvusは、AIアプリケーション向けに設計されたオープンソースのベクトルデータベースで、大量のベクトルデータの保存・インデックス作成・類似度検索をサポートします。RAG(Retrieval-Augmented Generation)、セマンティック検索、推薦システムなどの場面で広く利用されています。
Milvusは完全なRESTful APIインターフェースを提供しており、HTTPプロトコルを通じてベクトルデータの挿入・照会・検索などの操作が可能です。
なぜDBAPIでMilvusに接続するのか?
MilvusのHTTP APIを直接呼び出す場合、リクエストURLの組み立てやパラメータの構築、認証・認可の処理などをコード内で行う必要があります。DBAPIのHTTPエグゼキュータを使用することで、以下の利点を得られます:
- 統一されたAPI管理:すべてのMilvus操作をDBAPIのAPI形式で一元管理でき、権限管理・トラフィック制限・監視機能がすぐに利用可能
- パラメータマッピングの簡素化:カスタムマッピングモードにより、業務側のパラメータをMilvusが必要とするリクエストフォーマットへ自動変換し、呼び出し側はMilvusのインターフェース詳細を気にする必要なし
- セキュリティ管理:DBAPIのToken認証およびIPファイアウォール機能を継承
- ゼロコーディング連携:統合コードを一切記述せず、設定だけで完了
主要機能:HTTPエグゼキュータによるパラメータのカスタムマッピング
DBAPIエンタープライズ版4.5.0では、HTTPエグゼキュータのカスタムマッピングモードが強化されました。JSONテンプレートと${}プレースホルダー、さらにGroovy式を組み合わせることで、呼び出し側から渡されたパラメータを対象のインターフェースに必要なリクエストボディ形式へ柔軟に変換できます。
呼び出し側から渡されるパラメータ:{ "collection": "my_collection", "id": 1, "vector": [0.1, 0.2, ...], "text": "xxx" }
│ HTTPエグゼキュータによるパラメータマッピング
▼
Milvusが受け取るリクエスト:{ "collectionName": "my_collection", "data": [{ "id": 1, "vector": [0.1, 0.2, ...], "text": "xxx" }] }実践:Milvusへの接続
前提条件
- DBAPIエンタープライズ版4.5.0以上
- 配備済みのMilvusサービス(本稿ではMilvus HTTP API v2を例として使用)
- Milvus内に既にコレクションが作成済みであること
手順1:HTTPデータソースの作成
DBAPI管理画面の「データソース管理」から新規データソースを作成します。
| 設定項目 | 値 |
|---|---|
| 名称 | Milvusサービス |
| タイプ | HTTP |
| アドレス | http://192.168.1.100:19530 |
アドレスはMilvusサービスのHTTPポート番号で、デフォルトは19530です。
手順2:ベクトル挿入APIの作成
対象のグループ内にAPIを作成し、HTTPエグゼキュータを使用します。
基本情報
| 設定項目 | 値 |
|---|---|
| API名 | Milvusベクトル挿入 |
| APIパス | /milvus/insert |
| アクセス権限 | private |
| リクエストパラメータ | id(bigint)、vector(string)、text(string) |
vectorパラメータはJSON文字列で、例えば[0.1, 0.2, 0.3, ...]のように指定します。
エグゼキュータ設定
| 設定項目 | 値 |
|---|---|
| エグゼキュータタイプ | HTTPインターフェースプロキシエグゼキュータ |
| データソース | Milvusサービス |
| メソッド | POST |
| URLパス | /v2/vectordb/entities/insert |
| Content-Type | application/json |
| パラメータ伝達モード | カスタムマッピング |
カスタムリクエストヘッダー:
| Key | Value |
|---|---|
Authorization | YOUR_MILVUS_TOKEN |
Milvusで認証が有効になっている場合、カスタムリクエストヘッダーにTokenを設定すると、HTTPエグゼキュータが自動的に転送リクエストに注入します。
リクエストボディテンプレート:
{"collectionName": "news_articles", "data": [{"id": ${_parameters.id}, "vector": ${_parameters.vector}, "text": ${_parameters.text}}]}
collectionNameはテンプレート内で固定値として記述され、呼び出し側からは指定不要です。vectorパラメータはJSON配列文字列として渡され、Milvusのvectorフィールドにマッピングされます。
呼び出し結果
呼び出し側からのリクエスト:
POST https://127.0.0.1:8520/milvus/insert
Content-Type: application/json
{
"id": 1001,
"vector": [0.352, 0.187, 0.921, 0.453, 0.672],
"text": "DBAPIによるベクトルデータベースへの接続"
}システムはテンプレートに基づいてマッピングを行い、Milvusへ転送します(HTTPエグゼキュータがカスタムリクエストヘッダーを自動的に付与):
POST http://192.168.1.100:19530/v2/vectordb/entities/insert
Content-Type: application/json
Authorization: YOUR_MILVUS_TOKEN
{"collectionName": "news_articles", "data": [{"id": 1001, "vector": [0.352, 0.187, 0.921, 0.453, 0.672], "text": "DBAPIによるベクトルデータベースへの接続"}]}手順3:ベクトル検索APIの作成
基本情報
| 設定項目 | 値 |
|---|---|
| API名 | Milvusベクトル検索 |
| APIパス | /milvus/search |
| アクセス権限 | private |
| リクエストパラメータ | vector(string)、limit(bigint) |
エグゼキュータ設定
| 設定項目 | 値 |
|---|---|
| エグゼキュータタイプ | HTTPインターフェースプロキシエグゼキュータ |
| データソース | Milvusサービス |
| メソッド | POST |
| URLパス | /v2/vectordb/entities/search |
| Content-Type | application/json |
| パラメータ伝達モード | カスタムマッピング |
リクエストボディテンプレート:
{"collectionName": "news_articles", "vector": ${_parameters.vector}, "limit": ${_parameters.limit}, "outputFields": ["id", "text", "vector"]}
collectionNameはテンプレート内で固定値として記述され、呼び出し側からはベクトルと件数制限のみを指定します。
呼び出し結果
呼び出し側からのリクエスト:
POST https://127.0.0.1:8520/milvus/search
Content-Type: application/json
{
"vector": [0.350, 0.190, 0.910, 0.450, 0.670],
"limit": 5
}システムはテンプレートに基づいてマッピングを行い、Milvusへ転送します:
POST http://192.168.1.100:19530/v2/vectordb/entities/search
Content-Type: application/json
Authorization: YOUR_MILVUS_TOKEN
{"collectionName": "news_articles", "vector": [0.350, 0.190, 0.910, 0.450, 0.670], "limit": 5, "outputFields": ["id", "text", "vector"]}手順4:IDによる照会APIの作成
基本情報
| 設定項目 | 値 |
|---|---|
| API名 | Milvusベクトル照会 |
| APIパス | /milvus/query |
| アクセス権限 | private |
| リクエストパラメータ | collection(string)、id(bigint) |
エグゼキュータ設定
| 設定項目 | 値 |
|---|---|
| エグゼキュータタイプ | HTTPインターフェースプロキシエグゼキュータ |
| データソース | Milvusサービス |
| メソッド | POST |
| URLパス | /v2/vectordb/entities/query |
| Content-Type | application/json |
| パラメータ伝達モード | カスタムマッピング |
リクエストボディテンプレート:
{"collectionName": ${_parameters.collection}, "filter": "id == " + ${_parameters.id}, "outputFields": ["id", "text", "vector"]}Groovy式を用いてフィルタ条件
id == 1001を動的に生成し、呼び出し側はMilvusのクエリ構文を意識する必要なし。
呼び出し結果
呼び出し側からのリクエスト:
POST https://127.0.0.1:8520/milvus/query
Content-Type: application/json
{
"id": 1001
}システムはテンプレートに基づいてマッピングを行い、Milvusへ転送します:
POST http://192.168.1.100:19530/v2/vectordb/entities/query
Content-Type: application/json
Authorization: YOUR_MILVUS_TOKEN
{"collectionName": "news_articles", "filter": "id == 1001", "outputFields": ["id", "text", "vector"]}その他のパラメータマッピングのテクニック
複雑な入れ子構造
Milvusのコレクションに複数のベクトルフィールドや入れ子構造がある場合でも、テンプレートを活用して柔軟に構築できます:
{"collectionName": ${_parameters.collection}, "data": [{"id": ${_parameters.id}, "titleVector": ${_parameters.titleVector}, "contentVector": ${_parameters.contentVector}, "metadata": {"author": ${_parameters.author}, "tags": ${_parameters.tags}}}]}パラメータ演算
渡されたパラメータに対して事前処理を行うことも可能です:
{"collectionName": ${_parameters.collection}, "vector": ${_parameters.vector}, "limit": ${_parameters.limit + 10}, "offset": ${(_parameters.page - 1) * _parameters.pageSize}}条件付き代入
パラメータの値に応じて検索条件を動的に設定することもできます:
{"collectionName": ${_parameters.collection}, "vector": ${_parameters.vector}, "limit": ${_parameters.limit}, "params": {"nprobe": ${_parameters.precision == "high" ? 64 : 16}}}まとめ
DBAPIのHTTPエグゼキュータによるパラメータカスタムマッピング機能を活用することで、Milvusベクトルデータベースへの接続は非常にシンプルになります:
- 呼び出し側は業務上の意味を持つパラメータを渡すだけでよく、Milvus APIの詳細を知る必要はありません
- パラメータマッピングテンプレートは一元管理され、Milvusのインターフェースが変更されてもテンプレートを修正するだけで済み、呼び出し側には影響しません
- インターフェースはDBAPIの認証・トラフィック制限・監視といった企業向け機能をそのまま利用可能
- 完全なゼロコーディングで、設定だけで統合が完了します
バージョン要件:DBAPIエンタープライズ版4.5.0以降がHTTPエグゼキュータのカスタムマッピング機能に対応しています。