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.

  • JSON y ARRAY no 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

Resultado esperado

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

Resultado esperado

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 nullable está habilitado.

  • Cuando nullable=True pero no se establece ningún valor por defecto, el campo almacena NULL.

  • Cuando nullable=False y 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.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?