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.

  • JSON Les 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

Résultat attendu

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

Résultat attendu

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=True n'a pas de valeur par défaut, le champ enregistre NULL.

  • Si nullable=False n'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.

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?