Milvus 集合客户端
适用于 Python 3.13,依赖为 pymilvus==3.0.2。MilvusCollectionClient 是示例定义的类,内部使用官方 MilvusClient。一个实例绑定一个集合,集中保存向量字段、度量、搜索参数、返回字段和超时。
| 接口 | 作用 | 调用时机 |
|---|---|---|
create_collection() | 按传入的 Schema 创建集合、建立索引并加载 | 初始化新集合 |
load() | 加载已有集合 | 连接已有数据时 |
insert() / upsert() | 分批插入或更新,汇总写入数 | 文档入库、记录更新 |
search() | 单向量搜索、标量过滤、可选阈值筛选 | 相似度检索 |
query() / delete() | 按条件查询、按主键删除 | 记录管理 |
close() | 关闭客户端 | 所有操作完成后 |
常驻服务在每个工作进程启动时创建客户端并加载集合,请求间复用。停止接收请求、进行中的操作全部完成后关闭客户端。
milvus_client.py 末尾的调用示例用 try/finally 在操作结束后关闭客户端;常驻服务不需要在每次请求中重新连接或加载集合。
集合的 Schema 和文档向量由调用方提供。 类中没有模型下载、业务字段或自动建集合的查询逻辑。search_params 填索引的搜索参数,例如 IVF 的 {"nprobe": 10};metric_type 必须与已有索引一致。
search() 接收一条向量,返回命中列表。每项保留原有主键、distance 和 entity,本文主键字段名为 id。默认不筛分数;传入 threshold 后,COSINE、IP 保留大于等于阈值的结果,L2 保留小于等于阈值的结果。
分数筛选发生在 Top-K 返回后,结果可能少于
limit。L2 的阈值对应平方距离;IP、COSINE 的阈值对应各自的相似度。阈值应结合所选度量和实际数据确定。
分批写入不是一个整体事务,每批是一次独立请求。后批失败不会撤销已成功的批次;此封装不额外重试,最终异常交给调用方。普通 insert() 不负责主键去重。
connect_timeout控制连接阶段;timeout统一传给加载、查询、写入等操作,每批分别计时,不是整个批量任务的总时限。创建集合包含多个操作,也不保证在这个时间内全部完成。
将代码作为 milvus_client.py 放在调用脚本同目录或 Python 可导入路径中。文件末尾提供独立的写入、检索、更新和删除示例,使用手工构造的四维向量,无需下载模型:
| |
开启认证时设置 MILVUS_TOKEN="用户名:密码";MILVUS_DATABASE 默认是已存在的 default 数据库。这些环境变量名是示例约定。
直接运行会创建 client_example 集合并写入三条记录,最后删除其中一条。 示例不会删除整个集合;重复运行前换一个未使用的集合名。已有集合的查询方式见正文第 8 节。
| |