要使用Python开发与Milvus向量数据库交互的应用,首先需要确保你已经安装了Milvus和相应的Python客户端库。以下是一个简单的示例,展示如何使用Python连接到Milvus数据库,创建一个集合(collection),并插入一些向量数据。`

摘要:有了向量数据库,下一步就该在数据库里创建表,向量库里的表叫集合(Collection),对应关系型数据库的表,这跟mongo库一样,下面先把重要知识点梳理一下: 一、核心概念 集合(Collection):类似关系型数据库的「表」,是存储向
有了向量数据库,下一步就该在数据库里创建表,向量库里的表叫集合(Collection),对应关系型数据库的表,这跟mongo库一样,下面先把重要知识点梳理一下: 一、核心概念 集合(Collection):类似关系型数据库的「表」,是存储向量数据和标量数据的基本单元。 Schema(模式):集合的「结构定义」,规定了集合中字段的名称、数据类型、主键、向量维度等核心属性。 索引(Index):为提升向量 / 标量查询效率而创建的特殊数据结构,Milvus 支持多种索引类型适配不同场景。 加载状态(Load State):Milvus 的集合需要加载到内存才能提供查询服务,分为 Loaded(已加载)和 NotLoaded(未加载)两种状态。 二、向量集合的特点(关键知识点) 主键字段:每个集合必须有且仅有一个主键字段,支持 INT64/VARCHAR 类型,auto_id=False 表示主键需手动赋值(True 则由 Milvus 自动生成); 向量字段:Milvus 核心字段,支持 FLOAT_VECTOR(浮点型)和 BINARY_VECTOR(二进制),dim 必须与插入的向量维度一致(如 512、768 等); 动态字段:enable_dynamic_field=True 是 Milvus 的灵活特性,允许插入 Schema 中未定义的字段(如临时新增的标签、权重等),适合数据结构不固定的场景。 三、索引 标量索引:主键 / 字符串等标量字段常用 STL_SORT(排序索引),适合等值、范围查询; 向量索引:metric_type(度量类型):COSINE(余弦相似度)适合文本向量,L2(欧氏距离)适合图片向量,需根据业务场景选择。 四、加载和分片 加载状态:创建集合时传入 index_params 会自动加载集合到内存(Loaded),无索引则需后续手动调用 client.load_collection() 加载; 分片(Shard):num_shards 用于将集合数据拆分到多个分片,提升并发写入 / 查询性能,分片数需根据数据量和集群节点数调整(单节点集群建议设为 1)。 下面看代码: # 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发) # 目的是消除版本兼容带来的无关警告,让控制台输出更整洁 import warnings warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*") # 导入 Milvus 客户端核心模块和数据类型枚举 from pymilvus import MilvusClient, DataType # -------------------------- 核心操作:Milvus 集合(Collection)创建 -------------------------- # 1. 初始化 Milvus 客户端连接 # uri: Milvus 服务的地址和端口(HTTP 协议) # token: 认证令牌,格式为 "用户名:密码"(默认管理员账号 root,密码 Milvus) client = MilvusClient( uri="http://192.168.211.128:19530", token="root:Milvus" ) # 2. 创建集合模式(Schema) # schema 是集合的结构定义,包含字段名、数据类型、主键、向量维度等核心信息 # auto_id=False: 禁用自动生成 ID,需手动指定主键值 # enable_dynamic_field=True: 启用动态字段,允许插入 schema 中未定义的字段 schema = MilvusClient.create_schema( auto_id=False, enable_dynamic_field=True, ) # 3. 向 schema 中添加具体字段 # 3.1 添加主键字段:my_id,数据类型为 64 位整数,标记为主键 schema.add_field(field_name="my_id", datatype=DataType.INT64, is_primary=True) # 3.2 添加向量字段:my_vector,数据类型为浮点型向量,维度为 5(需与插入的向量维度一致) schema.add_field(field_name="my_vector", datatype=DataType.FLOAT_VECTOR, dim=5) # 3.3 添加字符串字段:my_varchar,数据类型为 VARCHAR,最大长度 512 字符 schema.add_field(field_name="my_varchar", datatype=DataType.VARCHAR, max_length=512) # 4. 配置索引参数(用于提升查询效率) # 初始化索引参数对象,用于批量添加多个字段的索引配置 index_params = client.prepare_index_params() # 4.1 为主键字段 my_id 添加索引 # index_type="STL_SORT": 针对排序场景的索引类型,适合主键字段 index_params.add_index( field_name="my_id", index_type="STL_SORT" ) # 4.2 为向量字段 my_vector 添加索引 # index_type="AUTOINDEX": Milvus 自动选择最优的向量索引类型(无需手动指定) # metric_type="COSINE": 向量相似度计算方式为余弦相似度(常用还有 L2、IP 等) index_params.add_index( field_name="my_vector", index_type="AUTOINDEX", metric_type="COSINE" ) # 5. 创建带索引的集合(创建时自动加载索引) # collection_name: 集合名称(two_table) # schema: 已定义的集合结构 # index_params: 已配置的索引参数,创建集合时会同时创建并加载索引 client.create_collection( collection_name="two_table", schema=schema, index_params=index_params ) # 6. 检查集合的加载状态 # 加载状态用于确认集合是否已加载到内存,可用于查询操作 res = client.get_load_state(collection_name="two_table") print("two_table 加载状态:", res) # 输出:{'state': 'Loaded'}(创建时加载索引,状态为已加载) print('---------------- 分割线 ----------------') # 7. 创建不带索引的集合 # 仅指定集合名称和 schema,不传入 index_params,创建后集合无索引,也不会自动加载 client.create_collection( collection_name="one_talbe", # 注:此处笔误应为 one_table,建议修正 schema=schema, ) # 检查无索引集合的加载状态 res = client.get_load_state(collection_name="one_talbe") # 输出:{'state': 'NotLoaded'}(无索引时,集合不会自动加载到内存) print("one_talbe 加载状态:", res) # 补充说明:无索引的集合可后续通过 create_index 方法添加索引,再通过 load_collection 加载 # 8. 创建指定分片数的集合 # num_shards=1: 设置集合的分片数量为 1(分片用于数据水平拆分,提升并发性能) # 适用于大规模数据场景,分片数需根据集群节点数和数据量合理设置 client.create_collection( collection_name="three_table", schema=schema, num_shards=1 # 指定分片数量 ) 执行结果: two_table 加载状态: {'state': <LoadState: Loaded>} ---------------- 分割线 ---------------- one_talbe 加载状态: {'state': <LoadState: NotLoad>} 更多学习资料尽在老虎网盘资源:http://resources.kittytiger.cn/ 老虎网盘资源