Milvus 向量数据库实战:高效删除数据的两种核心方式
Milvus 作为主流的开源向量数据库,在处理海量向量数据时,数据的增删改查是核心操作。本文聚焦 Milvus 中数据删除的两种常用方式(按主键删除、按条件批量删除),结合可直接运行的代码示例,带你掌握 Milvus 数据删除的实操技巧。 方式 1:按主键(ID)精准删除
适用于已知要删除数据的主键 ID 场景,可一次性删除单个或多个主键对应的数据,精准度高: 方式 2:按条件批量删除
适用于需要删除「符合特定业务条件」的批量数据场景,通过 filter 参数指定过滤规则,灵活度高: 关键注意事项
- 软删除特性:Milvus 的删除操作默认是「软删除」,数据不会立即从磁盘删除,而是标记为删除状态;如需彻底清理,可执行 client.compact(collection_name) 压缩数据。
- 一致性保障:删除操作是异步生效的,建议添加 time.sleep() 确保查询到最新数据。
- 过滤条件语法:filter 参数支持丰富的表达式(如 in/>/ 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': }
集合 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/ 老虎网盘资源
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |