Valores por defecto
Milvus le permite configurar valores por defecto para campos escalares (excluyendo el campo primario). Cuando un campo tiene configurado un valor por defecto, Milvus aplica automáticamente este valor si no se proporcionan datos durante la inserción.
Los valores por defecto simplifican la migración de datos desde otros sistemas de bases de datos a Milvus al conservar la configuración de valores por defecto existente. También puede utilizar valores por defecto para campos cuyos valores pueden ser inciertos en el momento de la inserción.
Límites
Sólo los campos escalares admiten valores por defecto. El campo primario y los campos vectoriales no pueden tener valores por defecto.
JSONyARRAYno admiten valores por defecto.Los valores por defecto sólo pueden configurarse durante la creación de la colección y no pueden modificarse posteriormente.
Establecer valores por defecto
Al crear una colección, utilice el parámetro default_value en add_field() para definir el valor por defecto de un campo.
El siguiente ejemplo crea una colección con dos campos escalares que tienen valores por defecto: age por defecto a 18 y status por defecto a "active".
from pymilvus import MilvusClient, DataType
client = MilvusClient(uri='http://localhost:19530')
# Define collection schema
schema = client.create_schema(
auto_id=False,
enable_dynamic_schema=True,
)
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, default_value=18)
schema.add_field(field_name="status", datatype=DataType.VARCHAR, default_value="active", max_length=10)
# Set index params
index_params = client.prepare_index_params()
index_params.add_index(field_name="vector", index_type="AUTOINDEX", metric_type="L2")
# Create collection
client.create_collection(collection_name="my_collection", schema=schema, index_params=index_params)
// java
// js
// go
# restful
Insertar entidades
Al insertar datos, si omite un campo que tiene un valor por defecto o lo establece explícitamente como NULL, Milvus utiliza automáticamente el valor por defecto configurado.
data = [
# All fields provided explicitly
{"id": 1, "vector": [0.1, 0.2, 0.3, 0.4, 0.5], "age": 30, "status": "premium"},
# age and status omitted → both use default values (18 and "active")
{"id": 2, "vector": [0.2, 0.3, 0.4, 0.5, 0.6]},
# status set to None → uses default value "active"
{"id": 3, "vector": [0.3, 0.4, 0.5, 0.6, 0.7], "age": 25, "status": None},
# age set to None → uses default value 18
{"id": 4, "vector": [0.4, 0.5, 0.6, 0.7, 0.8], "age": None, "status": "inactive"}
]
client.insert(collection_name="my_collection", data=data)
// java
// js
// go
# restful
Búsqueda y consulta con valores por defecto
Las entidades que contienen valores por defecto se comportan igual que cualquier otra entidad durante las búsquedas vectoriales y el filtrado escalar. Puede filtrar por valores por defecto en las operaciones search y query.
El siguiente ejemplo busca entidades en las que age es igual al valor por defecto 18:
res = client.search(
collection_name="my_collection",
data=[[0.1, 0.2, 0.4, 0.3, 0.5]],
search_params={"params": {"nprobe": 16}},
filter="age == 18",
limit=10,
output_fields=["id", "age", "status"]
)
print("Search results (age == 18):")
for hit in res[0]:
print(f" id: {hit['id']}, age: {hit['entity']['age']}, status: {hit['entity']['status']}")
// java
// js
// go
# restful
Output:
Search results (age == 18):
id: 2, age: 18, status: active
id: 4, age: 18, status: inactive
También puede consultar entidades comparando directamente los valores por defecto:
# Query entities where age equals the default value (18)
default_age_results = client.query(
collection_name="my_collection",
filter="age == 18",
output_fields=["id", "age", "status"]
)
print("\nQuery results (age == 18):")
for r in default_age_results:
print(f" id: {r['id']}, age: {r['age']}, status: {r['status']}")
# Query entities where status equals the default value ("active")
default_status_results = client.query(
collection_name="my_collection",
filter='status == "active"',
output_fields=["id", "age", "status"]
)
print("\nQuery results (status == 'active'):")
for r in default_status_results:
print(f" id: {r['id']}, age: {r['age']}, status: {r['status']}")
// java
// js
// go
# restful
Query results (age == 18):
id: 2, age: 18, status: active
id: 4, age: 18, status: inactive
Query results (status == 'active'):
id: 2, age: 18, status: active
id: 3, age: 25, status: active
Reglas aplicables
Cuando tanto nullable como default_value están configurados para un campo, las siguientes reglas determinan cómo Milvus trata la entrada NULL o los valores de campo que faltan durante la inserción.
Nullable |
Valor por defecto |
Entrada del usuario |
Resultado |
|---|---|---|---|
✅ |
✅ (no NULL) |
NULL u omitido |
Utiliza el valor por defecto |
✅ |
❌ |
NULL u omitido |
Se almacena como NULL |
❌ |
✅ (no NULL) |
NULL u omitido |
Utiliza el valor por defecto |
❌ |
❌ |
NULL u omitido |
Lanza un error |
❌ |
✅ (NULL) |
NULL u omitido |
Lanza un error |
Puntos clave:
Cuando un campo tiene un valor por defecto no NULL, ese valor se utiliza independientemente de si
nullableestá habilitado.Cuando
nullable=Truepero no se establece ningún valor por defecto, el campo almacena NULL.Cuando
nullable=Falsey no se establece ningún valor por defecto, la inserción falla con un error.Establecer un valor por defecto NULL en un campo no anulable no es válido y provoca un error.