Spring AI 系列(二):Milvus 操作一篇就够了——CLI 命令行 + Java SDK 实战全攻略
Spring AI 系列二Milvus 操作一篇就够了——CLI 命令行 Java SDK 实战全攻略本文介绍 Milvus 的两种操作方式通过 Milvus CLI 命令行工具进行操作以及通过 Java SDK 进行编程操作。1. Milvus Cli 操作Milvus中提供了Milvus Cli命令行方式对Milvus进行操作Milvus Cli 基于Python要求python3.8.5以上可以使用pip install milvus-cli进行安装如下是在windows中基于anconda默认已经安装安装python3.9环境并在该环境中安装 milvus-cli打开cmd后执行如下命令# 创建一个名为python_milvus的环境指定Python版本是3.9conda create--namepython_milvuspython3.9.23# 安装好后使用activate激活该环境activate python_milvus# 安装milvus-clipipinstallmilvus-cli# 安装 readline在window中使用 milvus_cli时需要该模块pipinstallpyreadline3#如果不行使用该环境可以执行如下删除该环境conda remove--namepython_milvus--all下面进入到 milvus-cli 中连接Milvus并进行基本操作。1.1 连接Milvus# 进入 milvus 客户端milvus_cli# 连接milvus_cli ,默认用户名和密码为root:Milvusmilvus_cliconnect-urihttp://node2:19530-troot:Milvus Connect Milvus successfully. Error occurred!list index out of range解释-uri:连接Milvus的uri 名称默认为 “http://127.0.0.1:19530”-t:连接Milvus的令牌指定用户名和密码;Error occurred可能是个bug先忽略。1.2 数据库操作创建、列出、使用、删除# 创建数据库milvus_clicreate database-dbtestdb Create database testdb successfully!#列出数据库milvus_clilist databases ---------|db_name|---------|default||testdb|---------#使用数据库milvus_cliuse database-dbtestdb Using database testdb successfully!#删除数据库milvus_clidelete database-dbtestdb Drop database testdb successfully!1.3 用户操作创建、列出、删除# 创建用户-u 用户名-p 密码milvus_clicreate user-uzs-p123456Create user successfully![root,zs]#列出所有用户milvus_clilistusers[root,zs]#删除用户-u 指定删除的用户milvus_clidelete user-uzs Warning!You are trying to delete the userinmilvus. This action cannot be undone!Do you want to continue?[y/N]: y Delete user zs successfully![root]通过Milvus Cli 操作Collection目前存在问题我们后续通过Java SDK来演示Collection操作。2. Milvus Java API 操作Java API 操作Milvus 需要JDK8版本以上maven中需要导入如下依赖dependencygroupIdio.milvus/groupIdartifactIdmilvus-sdk-java/artifactIdversion2.6.0/version/dependency这里以Java操作Milvus中的Collection为例介绍Milvus Java API使用。完整的 Java操作代码如下packageorg.example;importcom.google.gson.Gson;importcom.google.gson.JsonObject;importio.milvus.param.collection.FlushParam;importio.milvus.v2.client.ConnectConfig;importio.milvus.v2.client.MilvusClientV2;importio.milvus.v2.common.DataType;importio.milvus.v2.common.IndexParam;importio.milvus.v2.service.collection.request.*;importio.milvus.v2.service.collection.response.DescribeCollectionResp;importio.milvus.v2.service.utility.request.FlushReq;importio.milvus.v2.service.vector.request.DeleteReq;importio.milvus.v2.service.vector.request.GetReq;importio.milvus.v2.service.vector.request.InsertReq;importio.milvus.v2.service.vector.request.SearchReq;importio.milvus.v2.service.vector.response.DeleteResp;importio.milvus.v2.service.vector.response.GetResp;importio.milvus.v2.service.vector.response.InsertResp;importio.milvus.v2.service.vector.response.SearchResp;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;publicclassTestMilvusCollection{//可能更换成自己的主机staticStringCLUSTER_ENDPOINThttp://node2:19530;staticStringTOKENroot:Milvus;publicstaticvoidmain(String[]args){//1. 连接到 MilvusConnectConfigconnectConfigConnectConfig.builder().uri(CLUSTER_ENDPOINT).token(TOKEN).build();MilvusClientV2clientnewMilvusClientV2(connectConfig);StringcollectionNametestCollection;//1. 创建一个集合createCollection(client,collectionName);//2. 列出集合ListStringcollectionNamesclient.listCollections().getCollectionNames();System.out.println(Collections: collectionNames);//3.插入数据insertDataToCollection(client,collectionName);//4.查询数据GetRespgetRespclient.get(GetReq.builder().collectionName(collectionName)// 查询集合名称.ids(List.of(0,1,2))// 查询 id 为 0 和 1 的数据.outputFields(List.of(id,color))// 查询 id 和 color 字段.build());getResp.getResults.forEach(result-{System.out.println(查询结果result);});//4.根据主键删除数据DeleteRespdeleteclient.delete(DeleteReq.builder().collectionName(collectionName)// 删除集合名称.ids(List.of(0,1))// 删除 id 为 0 和 1 的数据.build());System.out.println(删除数据反馈delete);//5.删除集合// client.dropCollection(DropCollectionReq.builder()// .collectionName(collectionName)// .build());// System.out.println(删除集合collectionName);}privatestaticvoidinsertDataToCollection(MilvusClientV2client,StringcollectionName){//3.1 准备 json 数据GsongsonnewGson();ListJsonObjectdataArrays.asList(gson.fromJson({\id\: 0, \vector\: [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], \color\: \pink_8683\},JsonObject.class),gson.fromJson({\id\: 1, \vector\: [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], \color\: \red_7025\},JsonObject.class),gson.fromJson({\id\: 2, \vector\: [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], \color\: \orange_6781\},JsonObject.class),gson.fromJson({\id\: 3, \vector\: [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], \color\: \pink_9298\},JsonObject.class),gson.fromJson({\id\: 4, \vector\: [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], \color\: \red_4794\},JsonObject.class),gson.fromJson({\id\: 5, \vector\: [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], \color\: \yellow_4222\},JsonObject.class),gson.fromJson({\id\: 6, \vector\: [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], \color\: \red_9392\},JsonObject.class),gson.fromJson({\id\: 7, \vector\: [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], \color\: \grey_8510\},JsonObject.class),gson.fromJson({\id\: 8, \vector\: [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], \color\: \white_9381\},JsonObject.class),gson.fromJson({\id\: 9, \vector\: [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], \color\: \purple_4976\},JsonObject.class));//3.2 插入数据InsertRespinsertRespclient.insert(InsertReq.builder().collectionName(collectionName).data(data).build());//3.3 刷新数据 否则查询不到数据FlushReqflushReqFlushReq.builder().collectionNames(Arrays.asList(collectionName)).build();client.flush(flushReq);System.out.println(插入数据反馈insertResp);}publicstaticvoidcreateCollection(MilvusClientV2client,StringcollectionName){//1.1 先创建集合 schemaCreateCollectionReq.CollectionSchemaschemaMilvusClientV2.CreateSchema().addField(AddFieldReq.builder().fieldName(id).dataType(DataType.Int64).isPrimaryKey(true).autoID(false).build()).addField(AddFieldReq.builder().fieldName(vector).dataType(DataType.FloatVector).dimension(5).build()).addField(AddFieldReq.builder().fieldName(color).dataType(DataType.VarChar).maxLength(512).build());//1.2 如果要创建索引必须为 vector 列创建索引否则无法创建表// 建议对vector列创建索引方便高效向量搜索ListIndexParamindexParamsnewArrayList();IndexParamvectorIndexParam.builder().fieldName(vector).indexType(IndexParam.IndexType.IVF_FLAT)// 向量索引类型.metricType(IndexParam.MetricType.COSINE)// 余弦相似度.build();indexParams.add(vector);//1.3 创建集合if(client.hasCollection(HasCollectionReq.builder().collectionName(collectionName).build())){System.out.println(Collection already exists: collectionName);return;}client.createCollection(CreateCollectionReq.builder().collectionName(collectionName)// 集合名称.collectionSchema(schema)// 集合 schema.indexParams(indexParams)// 索引参数.build());System.out.println(Collection created: collectionName);}}以上代码注意如下几点创建Collection时需要指定Schema如果表中有vector字段必须设置索引加快查询速度。向Collection中插入数据后需要执行flush否则查询不到数据。在代码运行过程中可以结合Attu工具查看Milvus中的Collection及其内容。

相关新闻

BG3ModManager终极指南:3步掌握《博德之门3》模组管理核心技巧

BG3ModManager终极指南:3步掌握《博德之门3》模组管理核心技巧

BG3ModManager终极指南:3步掌握《博德之门3》模组管理核心技巧 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经因为《博德之门…

2026/7/29 17:30:25 阅读更多 →
CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS

CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS

# CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS1. 服务介绍/etc/vsftpd/vsftpd.conf 是 CentOS 7 上 vsftpd 的主配置文件,用于控制监听方式、匿名和本地用户、写入权限、目录隔离、被动端口、日志、超时及 TLS 加密…

2026/7/29 17:29:25 阅读更多 →
d2dx:暗黑破坏神2现代化的终极解决方案

d2dx:暗黑破坏神2现代化的终极解决方案

d2dx:暗黑破坏神2现代化的终极解决方案 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为经典《暗黑破坏神2…

2026/7/29 17:29:25 阅读更多 →

最新新闻

74HC系列芯片超详细入门笔记

74HC系列芯片超详细入门笔记

一、74系列芯片是什么? 1.1 先看名字:74 两个字是什么意思? 我们平时看到的芯片名字,比如 74HC138,开头的 74 其实就是一个系列的名字,就像"iPhone"是苹果手机系列的名字一样。 这个系列是由 德州仪器(Texas Instruments) 在上世纪60年代推出的,因为所有芯…

2026/7/29 17:44:31 阅读更多 →
空号检测三网直连信令实时查询:99.99%准确率如何精准剔除停机、关机、空号三类无效号码

空号检测三网直连信令实时查询:99.99%准确率如何精准剔除停机、关机、空号三类无效号码

空号检测为何成为企业通讯降本的核心抓手 2026年,企业私域运营与短信群发风控需求持续攀升,存量号码池质量走低已成为横亘在无数运营团队面前的现实难题。企讯通空号检测作为国内较早深耕号码核验领域的专业方案,凭借三网直连通道与批量实时…

2026/7/29 17:44:31 阅读更多 →
如何在5分钟内为你的苹果触控板安装Windows专业驱动,获得原生级触控体验?

如何在5分钟内为你的苹果触控板安装Windows专业驱动,获得原生级触控体验?

如何在5分钟内为你的苹果触控板安装Windows专业驱动,获得原生级触控体验? 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors…

2026/7/29 17:44:31 阅读更多 →
医疗设备CT核磁类控费系统-卓健易控V8.0

医疗设备CT核磁类控费系统-卓健易控V8.0

医疗设备CT核磁类控费系统-卓健易控V8.0一、系统背景 在我们这座繁忙的医院里,CT核磁类无疑是重中之重,如同一座矗立在医疗海洋中的灯塔,照亮患者病痛的迷雾。然而,随着科室的扩大与设备的增多,耗材的消耗速度犹如江河…

2026/7/29 17:44:31 阅读更多 →
深入理解NFSv3协议:基于nfsserve实现的READDIR_PLUS与文件句柄机制

深入理解NFSv3协议:基于nfsserve实现的READDIR_PLUS与文件句柄机制

深入理解NFSv3协议:基于nfsserve实现的READDIR_PLUS与文件句柄机制 【免费下载链接】nfsserve A Rust NFS Server implementation 项目地址: https://gitcode.com/gh_mirrors/nf/nfsserve NFS(网络文件系统)是实现文件共享的核心协议&…

2026/7/29 17:44:31 阅读更多 →
别踩选购误区:2026年4款Redmi录音转文字评测 新手选购实操经验总结

别踩选购误区:2026年4款Redmi录音转文字评测 新手选购实操经验总结

先说明白核心判断 针对医疗、法律从业者的核心需求,我们在2026年第一季度完成了4款主流录音转文字工具的实测,结合专业术语识别、隐私保护、继续教育内容消化三个核心维度来看:开源工具满足强隐私需求但门槛较高,海外工具转写基础…

2026/7/29 17:43:31 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻