找回密码
 立即注册
首页 业界区 安全 AI开发-python-milvus向量数据库(2-7 -milvus-精确使用 ...

AI开发-python-milvus向量数据库(2-7 -milvus-精确使用模式创建collection)

辖瑁地 前天 12:15
Milvus 向量数据库 Collection 创建与状态校验实战
Milvus 作为主流的开源向量数据库,Collection(集合)是其存储和管理向量数据的核心载体。本文基于 pymilvus SDK 实战讲解 Collection 的创建流程、核心参数含义及状态校验方法
看代码:
  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 DataType, FieldSchema, CollectionSchema,Collection, connections,utility
  6. # ====================== 1. 定义字段结构(FieldSchema) ======================
  7. # 定义主键字段:id
  8. # - name: 字段名
  9. # - dtype: 数据类型(INT64 整型)
  10. # - is_primary: 是否为主键(True 表示是主键)
  11. # - description: 字段描述
  12. id_field = FieldSchema( name="id",  dtype=DataType.INT64,  is_primary=True,  description="primary id")
  13. # 定义普通字段:age(年龄)
  14. # - dtype: INT64 整型,存储用户年龄
  15. age_field = FieldSchema( name="age", dtype=DataType.INT64,  description="age")
  16. # 定义向量字段:embedding(嵌入向量)
  17. # - dtype: FLOAT_VECTOR 浮点型向量
  18. # - dim: 向量维度(128维,需与实际存入的向量维度一致)
  19. embedding_field = FieldSchema( name="embedding",  dtype=DataType.FLOAT_VECTOR,  dim=128,  description="vector")
  20. # 定义分区键字段:position(位置)
  21. # - dtype: VARCHAR 字符串类型
  22. # - max_length: 字符串最大长度
  23. # - is_partition_key: 是否为分区键(True 表示是分区键)
  24. # 注:该字段在后续创建 Collection 时未加入 schema,如需使用需添加到 fields 列表中
  25. position_field = FieldSchema( name="position",   dtype=DataType.VARCHAR,  max_length=256,   is_partition_key=True)
  26. # ====================== 2. 定义 Collection 整体结构(CollectionSchema) ======================
  27. # 创建 Collection 的 schema(类似数据库表结构)
  28. # - fields: 包含该 Collection 的所有字段列表(此处仅使用 id/age/embedding 三个字段)
  29. # - auto_id: 是否自动生成主键(False 表示手动指定 id,与 is_primary=True 对应)
  30. # - enable_dynamic_field: 是否启用动态字段(True 表示允许插入 schema 中未定义的字段)
  31. # - description: Collection 的整体描述
  32. schema = CollectionSchema(
  33.     fields=[id_field, age_field, embedding_field],
  34.     auto_id=False,
  35.     enable_dynamic_field=True,
  36.     description="desc of a collection"
  37. )
  38. # ====================== 3. 连接 Milvus 服务器并创建 Collection ======================
  39. # 建立与 Milvus 服务器的连接
  40. # - host: Milvus 服务器的 IP 地址
  41. # - port: Milvus 服务器的端口号(默认 19530)
  42. conn = connections.connect(host="192.168.211.128", port=19530)
  43. # connections.connect() 是一个全局连接管理的操作,它的核心作用是:
  44. #
  45. #     与指定的 Milvus 服务器建立连接,并将这个连接以别名(默认是 'default')的形式注册到 Milvus 的全局连接池里。
  46. #     后续创建 Collection、插入数据、查询等所有操作,都会自动使用这个默认的全局连接(除非你显式指定其他别名)。
  47. #
  48. # 换句话说,conn = connections.connect(...) 中的 conn 变量只是返回了连接对象本身,但 SDK 内部已经记住了这个连接,后续操作无需再通过 conn 调用,就像这样:
  49. # 定义要创建的 Collection 名称
  50. collection_name = "table_3"
  51. # 创建 Collection(核心操作)
  52. # - name: Collection 名称
  53. # - schema: 已定义的 Collection 结构
  54. # - using: 使用的 Milvus 别名(默认 'default')
  55. # - shards_num: 分片数量(1 表示将数据分为 1 个分片,提升并发性能)
  56. collection1 = Collection(
  57.     name=collection_name,
  58.     schema=schema,
  59.     using='default',
  60.     shards_num=1
  61. )
  62. # ========== 正确的状态/信息查看方式 ==========
  63. # 方式1:查看 Collection 的详细元数据(最常用)
  64. print("=== Collection 详细信息 ===")
  65. collection_info = collection1.describe()
  66. print(collection_info)
  67. # 方式2:验证 Collection 是否存在(返回 True/False)
  68. print("\n=== 验证 Collection 是否存在 ===")
  69. is_exist = utility.has_collection(collection_name, using='default')
  70. print(f"Collection '{collection_name}' 是否存在:{is_exist}")
  71. # 方式3:查看 Collection 的加载状态(是否加载到内存,用于查询)
  72. print("\n=== Collection 加载状态 ===")
  73. load_state = utility.load_state(collection_name, using='default')
  74. print(f"Collection 加载状态:{load_state}")
  75. # 方式4:查看所有已创建的 Collection 列表
  76. print("\n=== 所有 Collection 列表 ===")
  77. all_collections = utility.list_collections(using='default')
  78. print(f"当前 Milvus 中的 Collection 列表:{all_collections}")
复制代码
 运行结果:
=== Collection 详细信息 ===
{'collection_name': 'table_3', 'auto_id': False, 'num_shards': 1, 'description': 'desc of a collection', 'fields': [{'field_id': 100, 'name': 'id', 'description': 'primary id', 'type': , 'params': {}, 'is_primary': True}, {'field_id': 101, 'name': 'age', 'description': 'age', 'type': , 'params': {}}, {'field_id': 102, 'name': 'embedding', 'description': 'vector', 'type': , 'params': {'dim': 128}}], 'functions': [], 'aliases': [], 'collection_id': 464357759084926662, 'consistency_level': 2, 'properties': {'timezone': 'UTC'}, 'num_partitions': 1, 'enable_dynamic_field': True}

=== 验证 Collection 是否存在 ===
Collection 'table_3' 是否存在:True

=== Collection 加载状态 ===
Collection 加载状态:NotLoad

=== 所有 Collection 列表 ===
当前 Milvus 中的 Collection 列表:['table_1', 'table_2', 'table_3', 'two_table', 'one_talbe', 'three_table', 'quick_setup', 'custom_quick_setup']


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

相关推荐

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