如何使用Python和Milvus向量数据库删除数据?

摘要:Milvus 向量数据库实战:高效删除数据的两种核心方式 Milvus 作为主流的开源向量数据库,在处理海量向量数据时,数据的增删改查是核心操作。本文聚焦 Milvus 中数据删除的两种常用方式(按主键删除、按条件批量删除),结合可直接运行
Milvus 向量数据库实战:高效删除数据的两种核心方式 Milvus 作为主流的开源向量数据库,在处理海量向量数据时,数据的增删改查是核心操作。本文聚焦 Milvus 中数据删除的两种常用方式(按主键删除、按条件批量删除),结合可直接运行的代码示例,带你掌握 Milvus 数据删除的实操技巧。 方式 1:按主键(ID)精准删除 适用于已知要删除数据的主键 ID 场景,可一次性删除单个或多个主键对应的数据,精准度高: 方式 2:按条件批量删除 适用于需要删除「符合特定业务条件」的批量数据场景,通过 filter 参数指定过滤规则,灵活度高: 关键注意事项 软删除特性:Milvus 的删除操作默认是「软删除」,数据不会立即从磁盘删除,而是标记为删除状态;如需彻底清理,可执行 client.compact(collection_name) 压缩数据。 一致性保障:删除操作是异步生效的,建议添加 time.sleep()确保查询到最新数据。 过滤条件语法:filter 参数支持丰富的表达式(如 in/>/</= 等),可根据业务需求灵活编写(例如 id > 10 and color like 'red_%')。 代码如下: # 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发) # 目的是消除版本兼容带来的无关警告,让控制台输出更整洁 import warnings warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*") from pymilvus import MilvusClient import time client = MilvusClient( uri="http://192.168.211.128:19530", token="root:Milvus" ) #集合名称 collection_name = "insert_collection" # 验证加载状态 load_state = client.get_load_state(collection_name=collection_name) print("----查看加载状态----") print(load_state) # 查询数据 all_data = client.query( collection_name=collection_name, filter="id >= 0", output_fields=["id", "vector", "color"], limit=10 # 使用实际数据量作为limit ) # 打印查询结果 print(f"\n集合 {collection_name} 中共有 {len(all_data)} 条数据:") for idx, data in enumerate(all_data): print(f"\n第{idx+1}条:") print(f"ID: {data['id']}") print(f"向量: {data['vector']}") print(f"颜色: {data['color']}") #通过主键删除 res = client.delete( collection_name=collection_name, # highlight-next-line ids=[0, 1] ) print(res) #批量删除了所有颜色字段设置为红色和绿色的实体 res = client.delete( collection_name=collection_name, filter="color in ['white_9381', 'purple_4976']" ) print(res) time.sleep(1) # 增加延迟,确保删除生效 # 查询数据 all_data = client.query( collection_name=collection_name, filter="id >= 0", output_fields=["id", "vector", "color"], limit=10 # 使用实际数据量作为limit ) # 打印查询结果 print(f"\n集合 {collection_name} 中共有 {len(all_data)} 条数据:") for idx, data in enumerate(all_data): print(f"\n第{idx+1}条:") print(f"ID: {data['id']}") print(f"向量: {data['vector']}") print(f"颜色: {data['color']}") 结果输出: ----查看加载状态---- {'state': <LoadState: Loaded>} 集合 insert_collection 中共有 10 条数据: 第1条: ID: 0 向量: [-0.6199544, 0.4479437, -0.17493895, -0.42480302, -0.8648453] 颜色: black_2 第2条: ID: 1 向量: [0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295] 颜色: red_7025 第3条: ID: 2 向量: [0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794] 颜色: orange_6781 第4条: ID: 3 向量: [0.3172005, 0.97190446, -0.36981148, -0.48608947, 0.9579189] 颜色: pink_9298 第5条: ID: 4 向量: [0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748] 颜色: red_4794 第6条: ID: 5 向量: [0.9858251, -0.81446517, 0.6299267, 0.12069069, -0.14462778] 颜色: yellow_4222 第7条: ID: 6 向量: [0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948] 颜色: red_9392 第8条: ID: 7 向量: [-0.33445147, -0.2567135, 0.898754, 0.9402996, 0.5378065] 颜色: grey_8510 第9条: ID: 8 向量: [0.3952472, 0.40002573, -0.5890507, -0.86505026, -0.6140361] 颜色: white_9381 第10条: ID: 9 向量: [0.57182807, 0.24070318, -0.37379134, -0.067269325, -0.6980532] 颜色: purple_4976 {'delete_count': 2} {'delete_count': 2} 集合 insert_collection 中共有 8 条数据: 第1条: ID: 2 向量: [0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794] 颜色: orange_6781 第2条: ID: 3 向量: [0.3172005, 0.97190446, -0.36981148, -0.48608947, 0.9579189] 颜色: pink_9298 第3条: ID: 4 向量: [0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748] 颜色: red_4794 第4条: ID: 5 向量: [0.9858251, -0.81446517, 0.6299267, 0.12069069, -0.14462778] 颜色: yellow_4222 第5条: ID: 6 向量: [0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948] 颜色: red_9392 第6条: ID: 7 向量: [-0.33445147, -0.2567135, 0.898754, 0.9402996, 0.5378065] 颜色: grey_8510 第7条: ID: 8 向量: [0.3952472, 0.40002573, -0.5890507, -0.86505026, -0.6140361] 颜色: white_9381 第8条: ID: 9 向量: [0.57182807, 0.24070318, -0.37379134, -0.067269325, -0.6980532] 颜色: purple_4976 更多学习资料尽在老虎网盘资源:http://resources.kittytiger.cn/ 老虎网盘资源