Valeurs par défaut
Milvus permet de définir des valeurs par défaut pour les champs scalaires (à l'exception du champ primaire). Lorsqu'une valeur par défaut est configurée pour un champ, Milvus l'applique automatiquement si aucune donnée n'est fournie lors de l'insertion.
Les valeurs par défaut simplifient la migration des données d'autres systèmes de base de données vers Milvus en préservant les paramètres de valeur par défaut existants. Vous pouvez également utiliser des valeurs par défaut pour les champs dont les valeurs peuvent être incertaines au moment de l'insertion.
Limites
Seuls les champs scalaires prennent en charge les valeurs par défaut. Le champ primaire et les champs vectoriels ne peuvent pas avoir de valeurs par défaut.
JSONLes champs de type "scalaire" et "ARRAY" ne prennent pas en charge les valeurs par défaut.Les valeurs par défaut ne peuvent être configurées que lors de la création de la collection et ne peuvent pas être modifiées par la suite.
Définir les valeurs par défaut
Lors de la création d'une collection, utilisez le paramètre default_value dans add_field() pour définir la valeur par défaut d'un champ.
L'exemple suivant crée une collection avec deux champs scalaires ayant des valeurs par défaut : age a pour valeur par défaut 18 et status a pour valeur par défaut "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
Insérer des entités
Lors de l'insertion de données, si vous omettez un champ ayant une valeur par défaut ou si vous lui attribuez explicitement la valeur NULL, Milvus utilise automatiquement la valeur par défaut configurée.
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
Recherche et interrogation avec des valeurs par défaut
Les entités contenant des valeurs par défaut se comportent de la même manière que les autres entités lors des recherches vectorielles et du filtrage scalaire. Vous pouvez filtrer par valeurs par défaut dans les opérations search et query.
L'exemple suivant recherche les entités pour lesquelles age est égal à la valeur par défaut 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
Vous pouvez également interroger des entités en faisant correspondre directement les valeurs par défaut :
# 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
Règles applicables
Lorsque nullable et default_value sont tous deux configurés pour un champ, les règles suivantes déterminent la manière dont Milvus traite les entrées NULL ou les valeurs de champ manquantes lors de l'insertion.
Nullable |
Valeur par défaut |
Entrée de l'utilisateur |
Résultat |
|---|---|---|---|
✅ |
✅ (non NULL) |
NULL ou omis |
Utilise la valeur par défaut |
✅ |
❌ |
NULL ou omis |
Stocké en tant que NULL |
❌ |
✅ (non NULL) |
NULL ou omis |
Utilise la valeur par défaut |
❌ |
❌ |
NULL ou omis |
Lance une erreur |
❌ |
✅ (NULL) |
NULL ou omis |
Lance une erreur |
Principaux enseignements :
Lorsqu'un champ a une valeur par défaut non NULL, cette valeur est utilisée indépendamment de l'activation de
nullable.Lorsque
nullable=Truen'a pas de valeur par défaut, le champ enregistre NULL.Si
nullable=Falsen'a pas de valeur par défaut, l'insertion échoue avec une erreur.La définition d'une valeur par défaut NULL pour un champ non annulable n'est pas valable et provoque une erreur.