DBAPI 接入 Milvus 向量数据库:HTTP 执行器参数映射实战
什么是 Milvus?
Milvus 是一款开源的向量数据库,专为 AI 应用场景设计,支持海量向量数据的存储、索引和相似度搜索。在 RAG(检索增强生成)、语义搜索、推荐系统等场景中被广泛使用。
Milvus 提供了完整的 RESTful API 接口,可以通过 HTTP 协议进行向量数据的插入、查询、搜索等操作。
为什么用 DBAPI 接入 Milvus?
直接调用 Milvus 的 HTTP API 需要在代码中拼接请求地址、构造请求参数、处理认证和鉴权。通过 DBAPI 的 HTTP 执行器接入 Milvus,您将获得:
- 统一 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 中已创建好集合(Collection)
第一步:创建 HTTP 数据源
在 DBAPI 管理后台进入数据源管理,点击创建数据源:
| 配置项 | 值 |
|---|---|
| 名称 | Milvus 服务 |
| 类型 | HTTP |
| 地址 | http://192.168.1.100:19530 |
地址为 Milvus 服务的 HTTP 端口,默认为 19530。
第二步:创建插入向量 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 服务 |
| Method | POST |
| URL 路径 | /v2/vectordb/entities/insert |
| Content-Type | application/json |
| 参数传递模式 | 自定义映射 |
自定义请求头:
| Key | Value |
|---|---|
Authorization |
YOUR_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 接入向量数据库"}]}
第三步:创建向量搜索 API
基础信息
| 配置项 | 值 |
|---|---|
| API 名称 | Milvus 向量搜索 |
| API 路径 | /milvus/search |
| 访问权限 | private |
| 请求参数 | vector(string)、limit(bigint) |
执行器配置
| 配置项 | 值 |
|---|---|
| 执行器类型 | HTTP 接口代理执行器 |
| 数据源 | Milvus 服务 |
| Method | POST |
| URL 路径 | /v2/vectordb/entities/search |
| Content-Type | application/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"]}
第四步:创建按 ID 查询 API
基础信息
| 配置项 | 值 |
|---|---|
| API 名称 | Milvus 查询向量 |
| API 路径 | /milvus/query |
| 访问权限 | private |
| 请求参数 | collection(string)、id(bigint) |
执行器配置
| 配置项 | 值 |
|---|---|
| 执行器类型 | HTTP 接口代理执行器 |
| 数据源 | Milvus 服务 |
| Method | POST |
| URL 路径 | /v2/vectordb/entities/query |
| Content-Type | application/json |
| 参数传递模式 | 自定义映射 |
请求体模板:
json
{"collectionName": "news_articles", "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 执行器参数自定义映射功能。