DBAPI 接入 Milvus 向量数据库:HTTP 执行器参数映射实战

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 执行器参数自定义映射功能。

相关推荐
名字还没想好☜2 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
ltl2 小时前
Serverless 数据库弹性理论:Neon 与 Aurora Serverless v2
数据库
marvelyu6 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
ZCBUS实时计算7 小时前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
zd2005727 小时前
海洋微生物数据库
数据库·宏基因组
海上小飞龙7 小时前
Redis 分布式锁原理:从 SET NX EX 到 Redisson 看门狗
数据库·redis·分布式
xiaoye-duck8 小时前
MySQL 表约束全解:从基础约束到外键关联规则
数据库·mysql
Hammer_Hans8 小时前
DFT笔记98
java·开发语言·数据库
迪康Defender9 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他
2601_965798479 小时前
Is Piroll WordPress Theme Worth It for Freelancers? Full Review
数据库·php