Valores por defeito
Milvus permite-lhe definir valores por defeito para os campos escalares (exceto o campo primário). Quando um campo tem um valor por defeito configurado, o Milvus aplica automaticamente esse valor se não forem fornecidos dados durante a inserção.
Os valores por defeito simplificam a migração de dados de outros sistemas de base de dados para o Milvus, preservando as configurações de valores por defeito existentes. Pode também utilizar valores por defeito para campos em que os valores podem ser incertos no momento da inserção.
Limites
Apenas os campos escalares suportam valores por defeito. O campo primário e os campos vectoriais não podem ter valores por defeito.
JSONOs campos de campo primário eARRAYnão suportam valores padrão.Os valores predefinidos só podem ser configurados durante a criação da coleção e não podem ser modificados posteriormente.
Definir valores padrão
Ao criar uma coleção, utilize o parâmetro default_value em add_field() para definir o valor predefinido para um campo.
O exemplo a seguir cria uma coleção com dois campos escalares que têm valores padrão: age tem como padrão 18 e status tem como padrão "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
Inserir entidades
Ao inserir dados, se omitir um campo que tenha um valor por defeito ou o definir explicitamente como NULL, o Milvus utiliza automaticamente o valor por defeito 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
Pesquisa e consulta com valores por defeito
As entidades que contêm valores por defeito comportam-se da mesma forma que quaisquer outras entidades durante as pesquisas vectoriais e a filtragem escalar. Você pode filtrar por valores padrão nas operações search e query.
O exemplo a seguir procura entidades em que age é igual ao valor padrão 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
Você também pode consultar entidades fazendo a correspondência direta dos valores padrão:
# 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
Regras aplicáveis
Quando ambos nullable e default_value estão configurados para um campo, as seguintes regras determinam como Milvus lida com a entrada NULL ou valores de campo em falta durante a inserção.
Nullable |
Valor por defeito |
Entrada do utilizador |
Resultado |
|---|---|---|---|
✅ |
✅ (não NULL) |
NULL ou omitido |
Utiliza o valor predefinido |
✅ |
❌ |
NULL ou omitido |
Armazenado como NULL |
❌ |
✅ (não NULL) |
NULL ou omitido |
Utiliza o valor predefinido |
❌ |
❌ |
NULL ou omitido |
Lança um erro |
❌ |
✅ (NULL) |
NULL ou omitido |
Lança um erro |
Principais conclusões:
Quando um campo tem um valor padrão não NULL, esse valor é usado independentemente de
nullableestar habilitado.Quando
nullable=Truemas nenhum valor padrão é definido, o campo armazena NULL.Quando
nullable=Falsee nenhum valor padrão é definido, a inserção falha com um erro.A definição de um valor por defeito NULL num campo não anulável é inválida e provoca um erro.