Milvus RESTful API 实战:不写一行代码,用Postman/Curl搞定向量搜索与管理
Milvus RESTful API 实战:不写一行代码,用Postman/Curl搞定向量搜索与管理
在当今数据驱动的时代,向量数据库已成为AI应用不可或缺的基础设施。Milvus作为一款开源的向量数据库,因其高性能和易用性广受开发者青睐。然而,许多运维工程师、测试人员或前端开发者可能并不熟悉Python、Java等编程语言,却需要快速验证Milvus服务或进行轻量级集成。本文将展示如何完全绕过传统SDK,仅用Postman图形界面或Curl命令行工具,通过RESTful API完成从集合管理到向量搜索的全流程操作。
1. 环境准备与基础配置
在开始之前,确保已具备以下条件:
- 运行中的Milvus服务(单机版或集群版均可)
- Postman工具(推荐)或任何支持发送HTTP请求的命令行工具
- 基础网络知识,能够访问Milvus服务端口(默认9091)
认证配置是第一步。如果Milvus启用了认证,需要在请求头中添加Authorization字段:
curl -X GET "http://localhost:9091/v1/vector/collections" \ -H "Authorization: Bearer root:Milvus" \ -H "accept: application/json"注意:默认认证用户名为root,密码为Milvus,生产环境务必修改
Postman用户可以在"Headers"选项卡中添加以下键值对:
- Key:
Authorization - Value:
Bearer root:Milvus
2. 集合全生命周期管理
2.1 创建向量集合
通过REST API创建集合需要明确三个核心参数:
- 集合名称(唯一标识)
- 向量维度(决定存储的向量大小)
- 距离度量标准(L2、IP等)
以下是一个创建128维向量的集合示例:
curl -X POST "http://localhost:9091/v1/vector/collections/create" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{ "collection_name": "image_embeddings", "dimension": 128, "metric_type": "L2" }'成功响应将返回:
{ "code": 200, "data": {} }2.2 查看集合信息
获取已创建集合的元数据:
curl -X GET "http://localhost:9091/v1/vector/collections/describe" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{"collection_name": "image_embeddings"}'返回结果示例:
{ "code": 200, "data": { "collection_name": "image_embeddings", "auto_id": false, "description": "", "fields": [ { "name": "vector", "type": "FloatVector", "params": {"dim": 128} } ] } }2.3 删除集合
当不再需要某个集合时,可通过简单API调用删除:
curl -X DELETE "http://localhost:9091/v1/vector/collections/delete" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{"collection_name": "image_embeddings"}'3. 向量数据操作实战
3.1 批量插入向量数据
向集合中添加数据时,需要构造符合格式的JSON请求体。以下示例插入3个128维向量:
curl -X POST "http://localhost:9091/v1/vector/insert" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{ "collection_name": "image_embeddings", "data": [ [0.12, 0.23, ..., 0.45], # 128个数值 [0.34, 0.45, ..., 0.56], [0.78, 0.89, ..., 0.90] ] }'提示:实际使用时需替换为真实向量值,省略号部分应补全128维数据
成功插入后返回的ID可用于后续操作:
{ "code": 200, "data": { "ids": [1, 2, 3] } }3.2 条件查询数据
Milvus支持基于标量字段的过滤查询。假设我们添加了"category"字段:
curl -X POST "http://localhost:9091/v1/vector/query" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{ "collection_name": "image_embeddings", "filter": "category == \"animal\"", "output_fields": ["vector", "category"] }'4. 向量搜索核心操作
4.1 基础相似性搜索
执行向量搜索需要准备:
- 查询向量(与集合维度一致)
- 搜索参数(如返回结果数量)
- 距离度量类型(需与创建集合时一致)
示例搜索请求:
curl -X POST "http://localhost:9091/v1/vector/search" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{ "collection_name": "image_embeddings", "vector": [0.11, 0.22, ..., 0.33], # 128维查询向量 "limit": 5, "params": { "nprobe": 16 } }'典型响应结构:
{ "code": 200, "data": [ { "id": 2, "distance": 0.08, "vector": [0.34, 0.45, ..., 0.56] }, { "id": 1, "distance": 0.12, "vector": [0.12, 0.23, ..., 0.45] } ] }4.2 混合搜索(标量+向量)
结合标量过滤和向量相似度的复合查询:
curl -X POST "http://localhost:9091/v1/vector/search" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{ "collection_name": "image_embeddings", "vector": [0.11, 0.22, ..., 0.33], "filter": "category == \"landscape\"", "limit": 3, "params": { "metric_type": "L2", "nprobe": 8 } }'5. 实战集成方案
5.1 Shell脚本自动化
将Curl命令封装成Shell脚本,实现自动化运维:
#!/bin/bash MILVUS_HOST="localhost" MILVUS_PORT="9091" TOKEN="root:Milvus" # 查询集合状态函数 check_collection() { curl -s -X GET "http://$MILVUS_HOST:$MILVUS_PORT/v1/vector/collections/describe" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"collection_name\":\"$1\"}" } # 使用示例 check_collection "image_embeddings"5.2 前端应用集成
在JavaScript中通过fetch API调用Milvus服务:
async function vectorSearch(queryVector) { const response = await fetch('http://localhost:9091/v1/vector/search', { method: 'POST', headers: { 'Authorization': 'Bearer root:Milvus', 'Content-Type': 'application/json' }, body: JSON.stringify({ collection_name: 'image_embeddings', vector: queryVector, limit: 5 }) }); return await response.json(); } // 使用示例 const results = await vectorSearch([0.1, 0.2, ..., 0.3]); console.log('Top matches:', results.data);5.3 性能优化技巧
- 批量处理:单次插入多条数据比多次插入单条效率更高
- 合理设置nprobe:在准确性和性能间取得平衡
- 连接复用:使用HTTP keep-alive减少连接建立开销
- 异步处理:对于大规模数据操作,检查任务状态而非同步等待
# 异步插入示例 curl -X POST "http://localhost:9091/v1/vector/insert" \ -H "Authorization: Bearer root:Milvus" \ -H "Content-Type: application/json" \ -d '{ "collection_name": "image_embeddings", "data": [[...], [...], [...]], "async": true }'