python milvus 案例
Milvus 向量数据库学习 Demo 涵盖 1. 连接 MilvusMilvusClient 2. 创建 Collectionschema 索引 3. 插入数据含向量 标量字段 4. 向量相似度搜索search 5. 标量字段过滤查询query 6. 按 ID 查询get 7. 删除数据 8. 删除 Collection import time from typing import Optional, List #向量归一化 import numpy as np from pymilvus import MilvusClient, DataType #向量归一化 def normalize(v): norm np.linalg.norm(v) return [x / norm for x in v] # # 配置按项目实际地址修改 # MILVUS_HOST 127.0.0.1 MILVUS_PORT 19530 库 MILVUS_DB default 表 COLLECTION_NAME t_employee 维度信息 VECTOR_DIM 4 # # 1. 连接 Milvus # def connect_milvus() - Optional[MilvusClient]: 创建 MilvusClient 连接 项目模式MilvusClient(urihttp://host:port, db_name...) try: client MilvusClient( urifhttp://{MILVUS_HOST}:{MILVUS_PORT}, db_nameMILVUS_DB, ) # ping 验证连接 client.list_collections() print(f[OK] 连接 Milvus 成功: {MILVUS_HOST}:{MILVUS_PORT}, db{MILVUS_DB}) return client except Exception as e: print(f[ERROR] 连接 Milvus 失败: {e}) return None # # 2. 创建 Collection # def create_collection(client: MilvusClient): 创建 t_employee 集合 字段设计 - id: VARCHAR 主键 - name: VARCHAR 员工姓名 - department: VARCHAR 部门 - salary: INT64 薪资 - vector: FLOAT_VECTOR 向量4维demo 用 - metadata: JSON 额外信息 # 如果已存在先删除demo 需要 if client.has_collection(collection_nameCOLLECTION_NAME): print(f[INFO] 集合已存在先删除: {COLLECTION_NAME}) client.drop_collection(collection_nameCOLLECTION_NAME) # 创建 Schema # 手动指定主键 # 允许动态字段项目用 True schema client.create_schema( auto_idFalse, enable_dynamic_fieldTrue, ) # 添加字段对标项目 add_field() schema.add_field( field_nameid, datatypeDataType.VARCHAR, max_length100, is_primaryTrue, nullableFalse, ) schema.add_field( field_namename, datatypeDataType.VARCHAR, max_length200, nullableTrue, ) schema.add_field( field_namedepartment, datatypeDataType.VARCHAR, max_length200, nullableTrue, ) schema.add_field( field_namesalary, datatypeDataType.INT64, nullableTrue, ) # 项目里可用大模型解析成1024 维 schema.add_field( field_namevector, datatypeDataType.FLOAT_VECTOR, dimVECTOR_DIM, ) # 代表扩展字段 schema.add_field( field_namemetadata, datatypeDataType.JSON, nullableTrue, ) # 创建集合 client.create_collection( collection_nameCOLLECTION_NAME, schemaschema, ) print(f[OK] 创建集合成功: {COLLECTION_NAME}) # 创建索引 index_params client.prepare_index_params() # 标量字段索引用于过滤加速 index_params.add_index( field_namedepartment, index_typeINVERTED, index_namedepartment_index, params{}, ) # 向量字段索引用于相似度搜索 # 配置AUTOINDEX IP内积AUTOINDEX 自动选择最优索引算法 index_params.add_index( field_namevector, index_typeAUTOINDEX, index_namevector_index, metric_typeIP, # 内积Inner Product ) client.create_index( collection_nameCOLLECTION_NAME, index_paramsindex_params, ) # 加载集合到内存查询前必须加载 client.load_collection(collection_nameCOLLECTION_NAME) # 新增阻塞等待加载完成 while True: state client.get_load_state(collection_nameCOLLECTION_NAME) if state[state] 3: # 3 Loaded break print(等待集合加载中...) time.sleep(0.2) print(f[OK] 索引创建并加载完成) # # 3. 插入数据 # def insert_employees(client: MilvusClient): 插入员工数据 项目模式client.insert(collection_name..., data[dict1, dict2, ...]) employees [ { id: emp_001, name: 张三, department: 技术部, salary: 25000, vector: normalize([0.12, 0.34, 0.56, 0.78]), # 模拟向量 metadata: {level: 高级, skills: [Python, ML]}, }, { id: emp_002, name: 李四, department: 技术部, salary: 20000, vector: normalize([0.15, 0.32, 0.54, 0.80]), metadata: {level: 中级, skills: [Java, Spring]}, }, { id: emp_003, name: 王五, department: 市场部, salary: 18000, vector: normalize([0.90, 0.78, 0.12, 0.34]), metadata: {level: 高级, skills: [营销, 品牌]}, }, { id: emp_004, name: 赵六, department: 市场部, salary: 15000, vector: normalize([0.85, 0.80, 0.15, 0.30]), metadata: {level: 中级, skills: [广告, 策划]}, }, { id: emp_005, name: 陈七, department: 人事部, salary: 16000, vector: normalize([0.45, 0.55, 0.65, 0.75]), metadata: {level: 初级, skills: [招聘, 培训]}, }, ] result client.insert( collection_nameCOLLECTION_NAME, dataemployees, ) print(f[OK] 插入 {len(employees)} 条员工数据, insert_count{result[insert_count]}) # # 4. 向量相似度搜索 # def search_similar_employees(client: MilvusClient, query_vector: List[float], top_k: int 3): 向量相似度搜索核心功能 项目模式client.search(collection_name..., data[vectors], ...) 搜索逻辑 1. 用 query_vector用户问题向量化后的结果去 Milvus 中找最相似的向量 2. 返回 top_k 条最匹配的结果 data # 查询向量支持批量传入列表套列表 anns_field # 在哪个向量字段上搜索 search_params # 搜索参数 output_fields # 返回的标量字段 result client.search( collection_nameCOLLECTION_NAME, data[query_vector], # 查询向量支持批量传入列表套列表 anns_fieldvector, # 在哪个向量字段上搜索 search_params{nprobe: 10}, # 搜索参数 limittop_k, # 返回 top-K output_fields[name, department, salary, metadata], # 返回的标量字段 ) print(f\n--- 向量搜索 (top_k{top_k}) ---) print(f 查询向量: {query_vector}) for i, hit in enumerate(result[0]): print(f [{i1}] id{hit[id]}, 距离{hit[distance]:.4f}) print(f 姓名: {hit[entity][name]}, 部门: {hit[entity][department]}, f薪资: {hit[entity][salary]}) return result # # 5. 标量字段过滤查询 # def query_by_department(client: MilvusClient, department: str): 按部门过滤查询标量字段过滤 项目模式client.query(collection_name..., filter..., output_fields...) result client.query( collection_nameCOLLECTION_NAME, filterfdepartment {department}, output_fields[id, name, department, salary, metadata], ) print(f\n--- 按部门查询: {department} ---) print(f 找到 {len(result)} 人:) for item in result: print(f - {item[name]} | 薪资 {item[salary]} | {item[metadata]}) return result def query_by_salary_range(client: MilvusClient, min_salary: int, max_salary: int): 按薪资范围过滤查询 result client.query( collection_nameCOLLECTION_NAME, filterfsalary {min_salary} salary {max_salary}, output_fields[id, name, department, salary], ) print(f\n--- 按薪资范围查询: {min_salary} ~ {max_salary} ---) print(f 找到 {len(result)} 人:) for item in result: print(f - {item[name]} ({item[department]}) 薪资 {item[salary]}) return result # # 6. 按 ID 查询 # def get_by_ids(client: MilvusClient, ids: List[str]): 按主键 ID 批量查询 result client.get( collection_nameCOLLECTION_NAME, idsids, output_fields[id, name, department, salary, vector], ) print(f\n--- 按 ID 查询: {ids} ---) for item in result: print(f - {item[id]}: {item[name]} | {item[department]} | 向量前3维: {item[vector][:3]}) return result # # 7. 删除数据 # def delete_by_filter(client: MilvusClient, filter_expr: str): 按条件删除对标项目中的 filter 删除 项目模式client.delete(collection_name..., filter...) result client.delete( collection_nameCOLLECTION_NAME, filterfilter_expr, ) print(f\n--- 删除: filter{filter_expr} ---) print(f 删除数量: {result[delete_count]}) return result # # 8. 主程序 # def main(): print( * 60) print(Milvus 向量数据库 Demo — 基于项目模式) print( * 60) # 1. 连接 client connect_milvus() if not client: return # 2. 创建 Collection create_collection(client) # 3. 插入数据 insert_employees(client) 等待数据加载到内存 time.sleep(1) # 4. 向量搜索找最像张三的人 # 张三的向量是 [0.12, 0.34, 0.56, 0.78] # 李四和他最像同技术部王五市场部最不像 search_similar_employees(client, query_vectornormalize([0.12, 0.34, 0.56, 0.78]), top_k3) # 5. 向量搜索找最像王五的人 search_similar_employees(client, query_vectornormalize([0.90, 0.78, 0.12, 0.34]), top_k3) # 6. 按部门过滤 query_by_department(client, 技术部) # 7. 按薪资范围过滤 query_by_salary_range(client, 18000, 30000) # 8. 按 ID 查询 get_by_ids(client, [emp_001, emp_003, emp_005]) # 9. 删除数据 delete_by_filter(client, department 人事部) # 验证删除 remaining client.query( collection_nameCOLLECTION_NAME, filterid ! , output_fields[id, name], ) print(f\n当前剩余数据: {len(remaining)} 条) for item in remaining: print(f - {item[id]}: {item[name]}) # 10. 清理 print(\n--- 清理 ---) client.drop_collection(collection_nameCOLLECTION_NAME) print(f[OK] 删除集合: {COLLECTION_NAME}) print(\n * 60) print(Demo 运行完毕) print( * 60) if __name__ __main__: main()

相关新闻

AI助力组态开发:自然语言生成工业可视化界面

AI助力组态开发:自然语言生成工业可视化界面

1. 项目概述:AI如何重塑组态开发流程在工业自动化和物联网可视化领域,组态软件长期面临着专业门槛高、开发效率低的痛点。传统组态开发需要工程师同时掌握PLC通信协议、数据绑定逻辑和界面设计技能,一个中等复杂度的HMI界面往往需要2-3天开发…

2026/7/27 6:36:06 阅读更多 →
MySQL数据分析入门:从SQL语法到电商用户行为分析实战

MySQL数据分析入门:从SQL语法到电商用户行为分析实战

很多同学想入门数据分析,但面对海量数据、复杂的SQL语法和五花八门的工具,常常感到无从下手。其实,数据分析的核心技能之一就是与数据库打交道,而MySQL作为最流行的开源关系型数据库,是每个数据分析师、后端开发乃至产…

2026/7/27 6:36:06 阅读更多 →
AI原生事实核查技术:多模态处理与实时验证

AI原生事实核查技术:多模态处理与实时验证

1. AI原生事实核查技术的时代背景2023年全球每天产生的数据量已达到328.77亿TB,其中社交媒体平台每分钟就有50万条新内容发布。在这个信息洪流中,虚假信息的传播速度是真实信息的6倍——这是MIT媒体实验室通过追踪300万条新闻得出的结论。作为从业12年的…

2026/7/27 6:36:06 阅读更多 →

最新新闻

AI智能体网站登录自动化:从原理到ChatGPT Work实战

AI智能体网站登录自动化:从原理到ChatGPT Work实战

1. 智能体与网站登录技术概述在当今的AI应用开发中,智能体(AI Agent)已经成为连接人工智能能力与实际业务场景的重要桥梁。特别是ChatGPT Work这类智能体平台,通过模拟人类操作行为,实现了对网站登录流程的自动化处理。…

2026/7/27 6:46:09 阅读更多 →
LLM架构对比:Encoder-Decoder与Decoder-only技术解析

LLM架构对比:Encoder-Decoder与Decoder-only技术解析

1. 从架构选择看LLM发展脉络2017年Transformer论文的发表彻底改变了自然语言处理的游戏规则,而架构选择始终是模型设计中的首要决策。在主流LLM发展历程中,Encoder-Decoder和Decoder-only两种架构形成了明显的技术分水岭。早期的机器翻译系统普遍采用Enc…

2026/7/27 6:46:09 阅读更多 →
终极指南:解决ComfyUI IPAdapter Plus的FaceID依赖错误,实现完美人脸控制

终极指南:解决ComfyUI IPAdapter Plus的FaceID依赖错误,实现完美人脸控制

终极指南:解决ComfyUI IPAdapter Plus的FaceID依赖错误,实现完美人脸控制 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus ComfyUI IPAdapter Plus是一个强大的AI图像生成插件&am…

2026/7/27 6:46:09 阅读更多 →
小白python入门 - 41. 路由、路径与查询参数

小白python入门 - 41. 路由、路径与查询参数

1. 本课定位:是什么、为何重要上一课服务已经能跑:/health 会回 ok,/docs 也能点。但真实 API 不会只有探活——书签业务要按资源区分列表、详情、删除,还要支持搜索和分页雏形。如果所有逻辑都堆在一个 main.py 里用硬编码路径&a…

2026/7/27 6:46:09 阅读更多 →
ExifToolGUI:告别命令行,用可视化界面轻松管理图片元数据

ExifToolGUI:告别命令行,用可视化界面轻松管理图片元数据

ExifToolGUI:告别命令行,用可视化界面轻松管理图片元数据 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾经需要批量修改照片的拍摄日期、添加位置信息,或者整理…

2026/7/27 6:46:09 阅读更多 →
AIGC驱动的个性化图书推荐系统核心技术解析

AIGC驱动的个性化图书推荐系统核心技术解析

1. 项目概述:当AIGC遇上阅读革命去年我书架上的未读书籍堆了37本,直到发现用AI生成个性化书单后,3天就啃完了8本专业书。这个智能推荐系统就像有个懂你的图书管理员,它能根据你的阅读习惯、知识缺口甚至情绪状态,把海量…

2026/7/27 6:45:09 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

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

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

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

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

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

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

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

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

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

2026/7/27 4:01:12 阅读更多 →

月新闻