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

Docker Compose 运行 Milvus (Mac) 并与 python 连接测试

Milvus 简单来说是一个向量化数据库,有 lite、standalone、distributed 三个版本,其中 lite 轻量化版本直接安装 python SDK 运行即可(pip install pymilvus),本文讲述如何借助 docker,在 mac 环境下配置并建立与 python 的连接。

安装 Docker

在官网下载 dmg 包 Mac | Docker Docs

看清楚自己的 mac 是什么芯片,m系列就和我一样选第一个

下载后跟其他软件一样安装即可,安装完成后打开终端,输入 docker -v 验证是否安装成功

下载 Docker 软件会看到类似的界面(我这里是运行了一些容器,大家刚安装正常是没有东西的)

安装 Milvus

拉取 docker compose 文件

wget https://github.com/milvus-io/milvus/releases/download/v2.5.14/milvus-standalone-docker-compose.yml -O docker-compose.yml

在终端输入上面的指令并回车,会下载一个 ocker-compose.yml

启动 Milvus

在终端输入下面的指令

docker compose up -d

运行后打开刚才下载的 docker 软件,就开始看到名为milvus- standalonemilvus-miniomilvus-etcd的容器已经启动。

简单介绍一下这三个组件(截取自官网)

  • milvus-etcd容器不向主机暴露任何端口,并将其数据映射到当前文件夹中的volumes/etcd
  • milvus-minio容器使用默认身份验证凭据在本地为端口90909091提供服务,并将其数据映射到当前文件夹中的volumes/minio
  • Milvus-standalone容器使用默认设置为本地19530端口提供服务,并将其数据映射到当前文件夹中的volumes/milvus

在终端运行 docker-compose ps 也能看到当前容器状态

Python 连接测试

首先在终端运行下面指令安装 python sdk(sdk 其实就是个工具包)

pip install pymilvus==2.6.0b0

如果 PyMilvus 安装正确,运行以下命令时不会出现异常。

python3 -c "from pymilvus import Collection"

贴出我的测试代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Milvus 连接测试代码
演示基本的连接、创建集合、插入数据、搜索等功能
"""import time
import random
import numpy as np
from pymilvus import (
connections,
utility,
FieldSchema,
CollectionSchema,
DataType,
Collection,
)def test_milvus_connection():"""测试Milvus连接"""print("正在连接Milvus...")try:# 连接到Milvus服务器connections.connect(alias="default",  # 连接别名host="localhost",  # 主机地址port="19530"       # 端口号)print("Milvus连接成功!")return Trueexcept Exception as e:print(f"Milvus连接失败: {e}")return Falsedef create_collection():"""创建测试集合"""print("\n正在创建测试集合...")# 定义字段模式fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128),  # 128维向量FieldSchema(name="label", dtype=DataType.VARCHAR, max_length=100)]# 创建集合模式schema = CollectionSchema(fields=fields,description="测试集合 - 用于演示Milvus功能")# 创建集合collection_name = "test_collection"collection = Collection(name=collection_name,schema=schema,using="default")# 创建索引print("正在创建向量索引...")index_params = {"metric_type": "L2",           # 距离度量类型:L2欧几里得距离"index_type": "IVF_FLAT",      # 索引类型:倒排文件"params": {"nlist": 128}       # 聚类中心数量}collection.create_index(field_name="vector",index_params=index_params)print(f"集合 '{collection_name}' 创建成功!")return collectiondef insert_sample_data(collection):"""插入示例数据"""print("\n正在插入示例数据...")# 生成随机向量数据num_entities = 1000vectors = np.random.rand(num_entities, 128).astype(np.float32)labels = [f"样本_{i}" for i in range(num_entities)]# 准备插入数据entities = [vectors,  # 向量数据labels    # 标签数据]# 插入数据collection.insert(entities)collection.flush()  # 确保数据持久化print(f"成功插入 {num_entities} 条数据!")return vectorsdef search_similar_vectors(collection, query_vector):"""搜索相似向量"""print("\n正在搜索相似向量...")# 加载集合到内存collection.load()# 搜索参数search_params = {"metric_type": "L2","params": {"nprobe": 10}}# 执行搜索results = collection.search(data=[query_vector],anns_field="vector",param=search_params,limit=5,  # 返回前5个最相似的结果output_fields=["label"])print("搜索结果:")for i, hits in enumerate(results):print(f"查询向量 {i + 1}:")for j, hit in enumerate(hits):print(f"  排名 {j + 1}: ID={hit.id}, 距离={hit.distance:.4f}, 标签={hit.entity.get('label')}")return resultsdef get_collection_stats(collection):"""获取集合统计信息"""print("\n集合统计信息:")# 获取实体数量num_entities = collection.num_entitiesprint(f"  实体数量: {num_entities}")# 获取索引信息index_info = collection.index().paramsprint(f"  索引类型: {index_info.get('index_type', 'N/A')}")print(f"  距离度量: {index_info.get('metric_type', 'N/A')}")def cleanup(collection_name):"""清理测试数据"""print(f"\n正在清理测试集合 '{collection_name}'...")try:utility.drop_collection(collection_name)print(f"集合 '{collection_name}' 已删除")except Exception as e:print(f"清理时出现警告: {e}")def main():"""主函数 - 执行完整的测试流程"""print("开始Milvus功能测试演示")print("=" * 50)# 1. 测试连接if not test_milvus_connection():return# 2. 创建集合collection = create_collection()# 3. 插入示例数据vectors = insert_sample_data(collection)# 4. 获取统计信息get_collection_stats(collection)# 5. 搜索相似向量# 使用第一个向量作为查询向量query_vector = vectors[0].tolist()search_similar_vectors(collection, query_vector)# 6. 清理测试数据(可选)# cleanup("test_collection")print("\nMilvus功能测试完成!")print("提示:如需保留测试数据,请注释掉cleanup函数调用")if __name__ == "__main__":main()

运行效果:

到此 mivlus 就是拉取并启动完成啦,后面可以参考官方文档去学习怎么样开发

参考资料:

Docker—苹果Mac安装Docker的两种方式-CSDN博客

Build RAG with Milvus | Milvus Documentation


文章转载自:

http://St6Er3wy.nkgbn.cn
http://w1zNGDBa.nkgbn.cn
http://gXn0g2PQ.nkgbn.cn
http://VRX7khYO.nkgbn.cn
http://pI2hziy4.nkgbn.cn
http://306kWLg8.nkgbn.cn
http://21F1zqLx.nkgbn.cn
http://GNqLgVQe.nkgbn.cn
http://UDYsLjPN.nkgbn.cn
http://vq3W9Cxg.nkgbn.cn
http://IYrFs5Pg.nkgbn.cn
http://Frou587R.nkgbn.cn
http://xdvawtIz.nkgbn.cn
http://6HyZGmsJ.nkgbn.cn
http://XmjvmNVV.nkgbn.cn
http://j5nMgqxL.nkgbn.cn
http://JuI41gkt.nkgbn.cn
http://pAR2BAHq.nkgbn.cn
http://xiZzT07C.nkgbn.cn
http://BAq39KtJ.nkgbn.cn
http://Bgdtttpz.nkgbn.cn
http://fX9NThTn.nkgbn.cn
http://YoBUCJ3S.nkgbn.cn
http://mx7IkSce.nkgbn.cn
http://sws5DfPW.nkgbn.cn
http://qmO7gXKG.nkgbn.cn
http://xSBz3ogH.nkgbn.cn
http://zqx5jGCU.nkgbn.cn
http://6WpYhKTB.nkgbn.cn
http://scWhnz6q.nkgbn.cn
http://www.dtcms.com/a/371346.html

相关文章:

  • 03-Redis 安装指南:从版本选择到多系统部署(Windows+macOS+Linux)
  • 路由策略实验配置
  • 【高并发内存池】五、页缓存的设计
  • PHP - OPcache 字节码缓存 - 学习/实践
  • redis学习——七
  • nginx反向代理不转发静态文件的解决办法
  • Webassemly和声明宏的联合使用
  • 选拔考试复现
  • 【Linux】 进程控制
  • C++ 连接 Redis:redis-plus-plus 安装与使用入门指南
  • K8s访问控制(二)
  • PerfTest:轻量高性能压测工具,兼容 HTTP/1/2/3、WebSocket,并带实时监控
  • 【Linux基础】fdisk命令详解:从入门到精通的磁盘分区管理完全指南
  • 【从零开始学习Redis】秒杀优化——阻塞队列、消息队列实现异步秒杀
  • 【基于深度学习的中草药识别系统】
  • AI 驱动数据分析:开源 SQLBot 项目探索,基于大模型和 RAG 实现精准问数与图表挖掘
  • 延迟 队列
  • 宋红康 JVM 笔记 Day14|垃圾回收概述
  • 【ICCV2025】计算机视觉|即插即用|ESC:颠覆Transformer!超强平替,ESC模块性能炸裂!
  • 手机能看、投屏 / 车机不能看与反向链接验证类似吗?
  • Xilinx ZYNQ 开发环境中搭建 Qt 环
  • leetcode909.蛇梯棋
  • JAVA NIO学习笔记基础强化学习总结
  • 基于51单片机手机无线蓝牙APP控制风扇调速设计
  • 力扣hot100:相交链表与反转链表详细思路讲解(160,206)
  • 如何在 DevOps 管道中实现 AI?
  • 【Java基础07】面向对象进阶
  • 动态维护有效区间:滑动窗口
  • 桌面时间 Catime
  • 解锁服务器网络配置新姿势:Wisdom SSH 助力之旅