Standardwerte

Milvus ermöglicht es Ihnen, Standardwerte für skalare Felder (mit Ausnahme des Primärfeldes) festzulegen. Wenn für ein Feld ein Standardwert konfiguriert wurde, wendet Milvus diesen Wert automatisch an, wenn beim Einfügen keine Daten angegeben werden.

Standardwerte vereinfachen die Datenmigration von anderen Datenbanksystemen zu Milvus, da vorhandene Standardwerteinstellungen beibehalten werden. Sie können auch Standardwerte für Felder verwenden, deren Werte zum Zeitpunkt des Einfügens unsicher sein könnten.

Grenzwerte

  • Nur skalare Felder unterstützen Standardwerte. Das Primärfeld und Vektorfelder können keine Standardwerte haben.

  • JSON und ARRAY Felder unterstützen keine Standardwerte.

  • Standardwerte können nur während der Erstellung der Sammlung konfiguriert und nicht nachträglich geändert werden.

Festlegen von Standardwerten

Verwenden Sie beim Erstellen einer Sammlung den Parameter default_value in add_field(), um den Standardwert für ein Feld festzulegen.

Im folgenden Beispiel wird eine Sammlung mit zwei skalaren Feldern erstellt, die Standardwerte haben: age hat den Standardwert 18 und status den Standardwert "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

Einfügen von Entitäten

Wenn Sie beim Einfügen von Daten ein Feld auslassen, das einen Standardwert hat, oder es explizit auf NULL setzen, verwendet Milvus automatisch den konfigurierten Standardwert.

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

Suche und Abfrage mit Standardwerten

Entitäten, die Standardwerte enthalten, verhalten sich bei der Vektorsuche und der skalaren Filterung genauso wie alle anderen Entitäten. Sie können sowohl bei search als auch bei query Operationen nach Standardwerten filtern.

Das folgende Beispiel sucht nach Entitäten, bei denen age gleich dem Standardwert 18 ist:

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

Erwartete Ausgabe

Output:
Search results (age == 18):
  id: 2, age: 18, status: active
  id: 4, age: 18, status: inactive

Sie können auch Entitäten abfragen, indem Sie Standardwerte direkt abgleichen:

# 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

Erwartete Ausgabe

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

Anwendbare Regeln

Wenn sowohl nullable als auch default_value für ein Feld konfiguriert sind, bestimmen die folgenden Regeln, wie Milvus NULL-Eingaben oder fehlende Feldwerte beim Einfügen behandelt.

Nullbar

Standardwert

Benutzereingabe

Ergebnis

✅ (Nicht-NULL)

NULL oder weggelassen

Verwendet den Standardwert

NULL oder weggelassen

Wird als NULL gespeichert

✅ (Nicht-NULL)

NULL oder weggelassen

Verwendet den Standardwert

NULL oder weggelassen

Wirft einen Fehler

✅ (NULL)

NULL oder weggelassen

Führt zu einem Fehler

Wichtigste Erkenntnisse:

  • Wenn ein Feld einen Nicht-NULL-Standardwert hat, wird dieser Wert unabhängig davon verwendet, ob nullable aktiviert ist.

  • Wenn nullable=True, aber kein Standardwert festgelegt ist, speichert das Feld NULL.

  • Wenn nullable=False und kein Standardwert eingestellt ist, schlägt das Einfügen mit einem Fehler fehl.

  • Das Festlegen eines NULL-Standardwerts für ein nicht-nullbares Feld ist ungültig und verursacht einen Fehler.

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?