📢 Enterprise v4.5.0 Released

Support MCP feature

📢 Enterprise v4.6.0 Released

Support AI SQL Writing feature

Skip to content

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-Typeapplication/json
パラメータ伝達モードカスタムマッピング

カスタムリクエストヘッダー:

KeyValue
AuthorizationYOUR_MILVUS_TOKEN

Milvusで認証が有効になっている場合、カスタムリクエストヘッダーにTokenを設定すると、HTTPエグゼキュータが自動的に転送リクエストに注入します。

リクエストボディテンプレート:

json
{"collectionName": "news_articles", "data": [{"id": ${_parameters.id}, "vector": ${_parameters.vector}, "text": ${_parameters.text}}]}

collectionNameはテンプレート内で固定値として記述され、呼び出し側からは指定不要です。 vectorパラメータはJSON配列文字列として渡され、Milvusのvectorフィールドにマッピングされます。

呼び出し結果

呼び出し側からのリクエスト:

bash
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-Typeapplication/json
パラメータ伝達モードカスタムマッピング

リクエストボディテンプレート:

json
{"collectionName": "news_articles", "vector": ${_parameters.vector}, "limit": ${_parameters.limit}, "outputFields": ["id", "text", "vector"]}

collectionNameはテンプレート内で固定値として記述され、呼び出し側からはベクトルと件数制限のみを指定します。

呼び出し結果

呼び出し側からのリクエスト:

bash
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-Typeapplication/json
パラメータ伝達モードカスタムマッピング

リクエストボディテンプレート:

json
{"collectionName": ${_parameters.collection}, "filter": "id == " + ${_parameters.id}, "outputFields": ["id", "text", "vector"]}

Groovy式を用いてフィルタ条件id == 1001を動的に生成し、呼び出し側はMilvusのクエリ構文を意識する必要なし。

呼び出し結果

呼び出し側からのリクエスト:

bash
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のコレクションに複数のベクトルフィールドや入れ子構造がある場合でも、テンプレートを活用して柔軟に構築できます:

json
{"collectionName": ${_parameters.collection}, "data": [{"id": ${_parameters.id}, "titleVector": ${_parameters.titleVector}, "contentVector": ${_parameters.contentVector}, "metadata": {"author": ${_parameters.author}, "tags": ${_parameters.tags}}}]}

パラメータ演算

渡されたパラメータに対して事前処理を行うことも可能です:

json
{"collectionName": ${_parameters.collection}, "vector": ${_parameters.vector}, "limit": ${_parameters.limit + 10}, "offset": ${(_parameters.page - 1) * _parameters.pageSize}}

条件付き代入

パラメータの値に応じて検索条件を動的に設定することもできます:

json
{"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エグゼキュータのカスタムマッピング機能に対応しています。