找回密码
 立即注册
首页 业界区 安全 AI开发-python-milvus向量数据库(2-8 -milvus-数据插入 ...

AI开发-python-milvus向量数据库(2-8 -milvus-数据插入collection)

垢峒 3 小时前
关于插入数据到collection以及查询collection中的数据有如下几个知识点需要了解。
1. flush 和 load_collection 的区别

 操作作用必要性flush()将内存中的数据刷入持久化存储,更新查询索引必须(query 查询依赖)load_collection()将集合数据加载到查询节点内存显式调用更稳妥(部分场景 Milvus 会自动加载) 2. 自动刷新机制

 Milvus 默认会定期自动刷新(约 1 秒),所以如果插入数据后等待几秒再查询,也可能查到数据。但在测试 / 实时查询场景下,手动调用 flush 是最可靠的方式。 3. query 和 search 的区别

 

  • query:标量查询,基于字段过滤,必须等待 flush 后才能查到新数据
  • search:向量检索,Milvus 对其做了优化,未 flush 的数据也可能被检索到(但不保证)
 总结

 

  • Milvus 插入数据后查询不到,核心原因是数据未完成持久化,而非集合未加载
  • 解决该问题的关键是在插入后执行client.flush()操作
  • 显式调用load_collection()能进一步确保数据可查,是生产环境的最佳实践
  • 理解 Milvus 的内存刷盘机制,能避免大部分 "数据插入成功但查不到" 的问题
 这个问题是 Milvus 新手的高频踩坑点,本质是对 Milvus 的性能优化机制不了解。掌握flush操作的使用时机,能让你在使用 Milvus 时少走很多弯路。 看代码:
  1. # 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发)
  2. # 目的是消除版本兼容带来的无关警告,让控制台输出更整洁
  3. import warnings
  4. warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*")
  5. from pymilvus import MilvusClient, DataType
  6. # 1. 初始化客户端
  7. client = MilvusClient(
  8.     uri="http://192.168.211.128:19530",
  9.     token="root:Milvus"
  10. )
  11. # 2. 定义集合名称
  12. collection_name = "insert_collection"
  13. # 3. 先删除已存在的同名集合(可选,避免创建失败)
  14. if client.has_collection(collection_name):
  15.     client.drop_collection(collection_name)
  16. # 4. 定义集合的结构(Schema),匹配你的数据格式
  17. # 字段说明:id(主键)、vector(5维向量)、color(字符串属性)
  18. schema = MilvusClient.create_schema(
  19.     auto_id=False,  # 手动指定id,不自动生成
  20.     enable_dynamic_field=True  # 允许动态字段(可选,增加灵活性)
  21. )
  22. # 添加主键字段 id
  23. schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
  24. # 添加向量字段 vector(5维,浮点型)
  25. schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)
  26. # 添加属性字段 color(字符串)
  27. schema.add_field(field_name="color", datatype=DataType.VARCHAR, max_length=20)
  28. # 5. 定义向量索引(必须,否则无法插入/查询向量)
  29. index_params = client.prepare_index_params()
  30. index_params.add_index(
  31.     field_name="vector",  # 为vector字段创建索引
  32.     index_type="IVF_FLAT",  # 基础索引类型,适合新手
  33.     metric_type="COSINE",  # 余弦相似度
  34.     params={"nlist": 128}  # 索引参数,默认值即可
  35. )
  36. # 6. 创建集合
  37. client.create_collection(
  38.     collection_name=collection_name,
  39.     schema=schema,
  40.     index_params=index_params
  41. )
  42. #向量的内容
  43. data=[
  44.     {"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
  45.     {"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
  46.     {"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
  47.     {"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
  48.     {"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
  49.     {"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
  50.     {"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
  51.     {"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
  52.     {"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
  53.     {"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
  54. ]
  55. res = client.insert(
  56.     collection_name=collection_name,
  57.     data=data
  58. )
  59. #插入后的结果
  60. print(res)
  61. # Milvus 为了保证高性能,插入的数据不会立刻对查询可见,需要触发 数据段刷新(flush) 操作,
  62. # 将内存中的数据持久化到存储并建立查询索引。即使集合显示 Loaded(加载到内存),
  63. # 未刷新的数据也无法被 query 语句检索到。
  64. client.flush(collection_name=collection_name)
  65. # 加载集合到内存(显式加载,确保数据可查)
  66. client.load_collection(collection_name=collection_name)
  67. # 验证加载状态(等待加载完成)
  68. load_state = client.get_load_state(collection_name=collection_name)
  69. print("----查看加载状态----")
  70. print(load_state)
  71. # 10. 查询数据
  72. all_data = client.query(
  73.     collection_name=collection_name,
  74.     filter="id >= 0",
  75.     output_fields=["id", "vector", "color"],
  76.     limit=100  # 使用实际数据量作为limit
  77. )
  78. # 11. 打印查询结果
  79. print(f"\n集合 {collection_name} 中共有 {len(all_data)} 条数据:")
  80. for idx, data in enumerate(all_data):
  81.     print(f"\n第{idx+1}条:")
  82.     print(f"ID: {data['id']}")
  83.     print(f"向量: {data['vector']}")
  84.     print(f"颜色: {data['color']}")
复制代码
结果输出:
{'insert_count': 10, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}
----查看加载状态----
{'state': }

集合 insert_collection 中共有 10 条数据:

第1条:
ID: 0
向量: [0.35803765, -0.6023496, 0.18414013, -0.26286206, 0.90294385]
颜色: pink_8682

第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
更多学习资料尽在老虎网盘资源:http://resources.kittytiger.cn/  老虎网盘资源
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册