我尝试在 Milvus 中实现可为空和默认值功能,如文档中所述。这是我使用的代码:
from pymilvus import MilvusClient, DataType
client = MilvusClient(uri='http://localhost:19530')
schema = client.create_schema()
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)
schema.add_field(field_name="age", datatype=DataType.INT64, nullable=True) # Nullable field
index_params = client.prepare_index_params()
index_params.add_index(field_name="vector", index_type="IVF_FLAT", metric_type="L2", params={"nlist": 128})
client.create_collection(collection_name="user_profiles_null", schema=schema, index_params=index_params)
data = [
{"id": 1, "vector": [0.1, 0.2, 0.3, 0.4, 0.5], "age": 30},
{"id": 2, "vector": [0.2, 0.3, 0.4, 0.5, 0.6], "age": None},
]
client.insert(collection_name="user_profiles_null", data=data)
但是,当我尝试在
None
字段中插入具有 age
值的数据时,我收到以下错误:
File d:\milvus_connect\milvus\lib\site-packages\pymilvus\client\entity_helper.py:264, in pack_field_value_to_field_data(field_value, field_data, field_info)
262 field_data.scalars.long_data.data.append(field_value)
263 except (TypeError, ValueError) as e:
--> 264 raise DataNotMatchException(
265 message=ExceptionsMessage.FieldDataInconsistent
266 % (field_name, "int64", type(field_value))
267 ) from e
268 elif field_type == DataType.FLOAT:
269 try:
DataNotMatchException: <DataNotMatchException: (code=1, message=The Input data type is inconsistent with defined schema, {age} field should be a int64, but got a {<class 'NoneType'>} instead.)>
该错误表明
None
字段的 age
值未作为可空值正确处理。如何解决此问题以允许 Milvus 中可空字段具有 None
值?
您可以分享您正在使用的 pymilvus 版本吗?我检查了2.5上的pymilvus代码,发现与错误信息不符。如果这里没有使用匹配的SDK版本,建议将SDK版本升级到2.5。