当前位置: 首页 > news >正文

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

执行向量搜索需要准备:

  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 }'
http://www.jsqmd.com/news/762899/

相关文章:

  • CCS12.1新功能实测:用Memory Allocation视图5分钟定位CC8编译内存溢出(附SysConfig配置案例)
  • Go语言TUI井字棋实战:Bubble Tea框架与终端游戏开发
  • 闽南师范大学考研辅导班机构推荐:排行榜单与哪家好评测 - michalwang
  • AI代码生成工具aiac实战:从原理到DevOps应用全解析
  • 实测避坑:用SGM61720做BUCK电路,SW引脚电压尖峰怎么压下去?
  • 合同违约合同纠纷律师如何选?西安董颖律师团队告诉你 - 工业品牌热点
  • 如何快速掌握TrollInstallerX:iOS越狱工具的终极安装指南
  • Dify缓存序列化性能黑洞:Protobuf v4.27 vs Jackson 2.15.2实测对比,JSON转二进制后吞吐提升3.8倍
  • 别只当镜像工具用!FTK Imager 4.7.1.2的数据恢复实战:行车记录仪SD卡恢复保姆级教程
  • ESP32玩转1.3寸ST7789屏幕:从点亮到显示中文,一份避坑指南
  • python新手福音,在快马平台零配置开启你的第一行代码
  • 别再只会用color了!CSS渐变、滤镜、倒影文字特效实战(附完整源码)
  • 别再只显示文字了!用0.96寸OLED屏做个迷你游戏机(ESP32 + Arduino)
  • 快速验证openclaw安装:用快马一键生成ubuntu部署脚本原型
  • 氯雷他定口腔崩解片选购与品牌对比指南 - 速递信息
  • 别再只让小车跑圈了!用51单片机给清洁机器人加上“眼睛”和“大脑”(避障+路径规划实战)
  • 如何高效使用AEUX:5分钟从Figma/Sketch到After Effects的终极转换指南
  • Python 爬虫进阶技巧:懒加载图片真实地址批量提取
  • 别再傻傻分不清了!Spring中setInstanceSupplier和FactoryBean到底怎么选?附实战场景对比
  • 从LCD刷屏到UI动画:深入拆解STM32的DMA2D,让你的图形界面飞起来
  • 智能客服系统集成 Taotoken 以平衡响应质量与 API 调用成本
  • 突破网速瓶颈!2025年最值得拥有的八大网盘直链解析神器
  • 告别卡死!STM32F4/F1 SDIO DMA读写SD卡全流程调试与常见问题排查指南
  • 揭秘Python高并发抢票系统:从毫秒级响应到分布式部署的实战突破
  • 本地千万级图片秒搜:你的个人智能图库管理终极方案
  • 告别‘能跑就行’:在openKylin上部署Nacos后,你必须检查的5个关键配置项
  • 2026年制造业指南:如何高效编制泡泡图(Bubble Drawing)及质量检验计划
  • 别再死磕Softmax了!用Huffman树实现Hierarchical Softmax,Word2Vec训练速度飙升
  • 跑遍赣州回收圈,福正美凭啥让我回头三次还带人 - 福正美黄金回收
  • 告别网盘限速烦恼!九大平台一键获取真实下载链接的终极解决方案