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.
JSONundARRAYFelder 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
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
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
nullableaktiviert ist.Wenn
nullable=True, aber kein Standardwert festgelegt ist, speichert das Feld NULL.Wenn
nullable=Falseund 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.