Milvus RESTful API 实战:不写一行代码,用Postman/Curl搞定向量搜索与管理
2026/5/6 10:02:28 网站建设 项目流程

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 基础相似性搜索

执行向量搜索需要准备:

  1. 查询向量(与集合维度一致)
  2. 搜索参数(如返回结果数量)
  3. 距离度量类型(需与创建集合时一致)

示例搜索请求:

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 性能优化技巧

  1. 批量处理:单次插入多条数据比多次插入单条效率更高
  2. 合理设置nprobe:在准确性和性能间取得平衡
  3. 连接复用:使用HTTP keep-alive减少连接建立开销
  4. 异步处理:对于大规模数据操作,检查任务状态而非同步等待
# 异步插入示例 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 }'

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询