向Milvus分区插入数据时遇DataTypeNotSupportException问题求助
解决Milvus分区插入数据时的DataTypeNotSupportException错误
问题分析
你遇到的错误核心是插入数据的格式不符合pymilvus的要求:
- Option1的字段分组字典格式,在部分pymilvus版本中可能存在数据类型隐式转换的兼容性问题,导致服务端无法识别数据类型
- Option2的格式完全错误,你将整个字段字典包裹在单个列表元素中,而非按单条数据的维度组织列表
正确的插入方式
方式1:按行组织的字典列表(兼容性最优)
这是最直观且不易出错的格式,每个字典对应单条数据:
from pymilvus import FieldSchema, CollectionSchema, DataType, connections, Partition # 初始化Schema与连接 id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True) vector_field = FieldSchema(name="text_vector", dtype=DataType.FLOAT_VECTOR, dim=768) schema = CollectionSchema(fields=[id_field, vector_field]) connections.connect(host=MILVUS_SETTINGS['host'], port=MILVUS_SETTINGS['port']) # 创建集合与分区(必须确保分区已在Milvus中创建) milvus_collection = Collection(name="test_collection_name", schema=schema) milvus_collection.create_partition("test_partition_name") milvus_partition = milvus_collection.partition("test_partition_name") # 准备数据 unique_id = 1 text_vector = [0.1] * 768 # 按行组织的正确格式 data = [ {"id": unique_id, "text_vector": text_vector}, {"id": unique_id + 1, "text_vector": text_vector} ] # 执行插入 milvus_partition.insert(data=data)
方式2:按字段组织的列表(适配新版本pymilvus)
如果偏好字段分组的格式,需明确指定ID字段的数据类型为int64,避免隐式转换问题:
import numpy as np # 准备字段分组数据,明确ID类型为int64 data = { "id": np.array([unique_id, unique_id + 1], dtype=np.int64), "text_vector": [text_vector, text_vector] } milvus_partition.insert(data=data)
关键注意事项
- 必须先通过
create_partition方法在Milvus中创建分区,仅实例化Partition对象不会自动创建分区 - 确保向量维度与Schema中定义的
dim=768完全一致 - 检查pymilvus与Milvus服务端的版本匹配性,建议使用官方推荐的同版本组合(如Milvus 2.2.x对应pymilvus 2.2.x)
内容的提问来源于stack exchange,提问作者Rashad Tockey
相关产品推荐
相关产品推荐

