ARRAY-Operatoren
Milvus bietet ARRAY-Operatoren zum Filtern von ARRAY-Feldern und zum teilweisen Aktualisieren von ARRAY-Feldwerten.
Alle Elemente innerhalb eines Arrays müssen denselben Typ haben, und verschachtelte Strukturen innerhalb von Arrays werden als einfache Zeichenfolgen behandelt. Daher ist es bei der Arbeit mit ARRAY-Feldern ratsam, eine zu tiefe Verschachtelung zu vermeiden und sicherzustellen, dass Ihre Datenstrukturen so flach wie möglich sind, um eine optimale Leistung zu erzielen.
ARRAY-Operatoren in Milvus decken zwei Anwendungsszenarien ab:
Filterausdrücke für Abfragen und Suchvorgänge.
Teilaktualisierungen in „
upsert“-Anfragen.
Verfügbare ARRAY-Operatoren
Die folgende Tabelle listet die in Milvus verfügbaren ARRAY-Operatoren auf.
| Operator | Verwendung in | Beschreibung |
|---|---|---|
| ARRAY_CONTAINS(Bezeichner, Ausdruck) | Filterausdruck | Prüft, ob ein bestimmtes Element in einem ARRAY-Feld vorhanden ist. |
| ARRAY_CONTAINS_ALL(Bezeichner, Ausdruck) | Filterausdruck | Prüft, ob alle Elemente einer angegebenen Liste in einem ARRAY-Feld vorhanden sind. |
| ARRAY_CONTAINS_ANY(Bezeichner, Ausdruck) | Filterausdruck | Prüft, ob mindestens ein Element einer angegebenen Liste in einem ARRAY-Feld vorhanden ist. |
| ARRAY_LENGTH(Bezeichner) | Filterausdruck | Gibt die Anzahl der Elemente in einem ARRAY-Feld zurück und kann zur Filterung mit Vergleichsoperatoren kombiniert werden. |
| ARRAY_APPEND | upsert mit field_ops | Fügt Payload-Elemente an ein bestehendes ARRAY-Feld an. Verfügbar ab Milvus v2.6.17. |
| ARRAY_REMOVE | upsert mit field_ops | Entfernt alle Elemente aus einem bestehenden ARRAY-Feld, die mit einem Wert in der Anfrage-Nutzlast übereinstimmen. Verfügbar ab Milvus v2.6.17. |
ARRAY_CONTAINS
Der Operator „ ARRAY_CONTAINS “ prüft, ob ein bestimmtes Element in einem Array-Feld vorhanden ist. Dies ist nützlich, wenn Sie Entitäten finden möchten, bei denen ein bestimmtes Element im Array vorhanden ist.
Beispiel
Angenommen, Sie haben ein Array-Feld „ history_temperatures “, das die niedrigsten gemessenen Temperaturen für verschiedene Jahre enthält. Um alle Entitäten zu finden, bei denen das Array den Wert „ 23 “ enthält, können Sie den folgenden Filterausdruck verwenden:
filter = 'ARRAY_CONTAINS(history_temperatures, 23)'
Dadurch werden alle Entitäten zurückgegeben, bei denen das Array „ history_temperatures “ den Wert „ 23 “ enthält.
ARRAY_CONTAINS_ALL
Der Operator „ ARRAY_CONTAINS_ALL “ stellt sicher, dass alle Elemente der angegebenen Liste im Array-Feld vorhanden sind. Dieser Operator ist nützlich, wenn Sie Entitäten finden möchten, deren Array mehrere Werte enthält.
Beispiel
Wenn Sie alle Entitäten finden möchten, bei denen das Array „ history_temperatures “ sowohl „ 23 “ als auch „ 24 “ enthält, können Sie Folgendes verwenden:
filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'
Dadurch werden alle Entitäten zurückgegeben, bei denen das Array „ history_temperatures “ beide angegebenen Werte enthält.
ARRAY_CONTAINS_ANY
Der Operator „ ARRAY_CONTAINS_ANY “ prüft, ob eines der Elemente aus der angegebenen Liste im Array-Feld vorhanden ist. Dies ist nützlich, wenn Sie Entitäten finden möchten, die mindestens einen der angegebenen Werte im Array enthalten.
Beispiel
Um alle Entitäten zu finden, bei denen das Array „ history_temperatures “ entweder „ 23 “ oder „ 24 “ enthält, können Sie Folgendes verwenden:
filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'
Dadurch werden alle Entitäten zurückgegeben, bei denen das Array „ history_temperatures “ mindestens einen der Werte „ 23 “ oder „ 24 “ enthält.
ARRAY_LENGTH
Die Funktion „ ARRAY_LENGTH “ gibt die Länge (Anzahl der Elemente) eines Array-Feldes zurück. Sie akzeptiert genau einen Parameter: die Kennung des Array-Feldes.
Beispiel
Um alle Entitäten zu finden, bei denen das Array „ history_temperatures “ weniger als 10 Elemente enthält:
filter = 'ARRAY_LENGTH(history_temperatures) < 10'
Dadurch werden alle Entitäten zurückgegeben, bei denen das Array „ history_temperatures “ weniger als 10 Elemente enthält.
ARRAY_APPENDCompatible with Milvus 2.6.17+
Der Operator „ ARRAY_APPEND “ fügt während einer „ upsert “-Anfrage Payload-Elemente an ein bestehendes ARRAY-Feld an. Es handelt sich dabei nicht um einen Filterausdruck. Verwenden Sie ihn, wenn Sie Werte zu einem Array hinzufügen möchten, ohne zuvor den aktuellen Array-Wert abzufragen.
Das folgende Python-Beispiel hängt „ "premium" “ an das ARRAY-Feld der Entität an, deren Primärschlüssel „ 1 “ lautet, und führt dabei eine „ tags “-Anfrage durch:
from pymilvus import FieldOp, MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
client.upsert(
collection_name="users",
data=[{"pk": 1, "tags": ["premium"]}],
field_ops={"tags": FieldOp.array_append()},
)
Das Hinzufügen von „ ARRAY_APPEND “ zu einem Feld über „ field_ops “ ermöglicht die Semantik der Teilaktualisierung für dieses Feld. Informationen zum vollständigen Arbeitsablauf, zu den unterstützten Elementtypen und zu den Einschränkungen finden Sie unter „Upsert-ARRAY-Felder im Merge-Modus“.
ARRAY_REMOVECompatible with Milvus 2.6.17+
Der Operator „ ARRAY_REMOVE “ entfernt bei einer „ upsert “-Anfrage jedes Element aus einem bestehenden ARRAY-Feld, das mit einem Wert in der Anforderungsnutzlast übereinstimmt. Es handelt sich dabei nicht um einen Filterausdruck. Verwenden Sie ihn, wenn Sie übereinstimmende Werte aus einem Array entfernen möchten, ohne zuvor den aktuellen Array-Wert abzufragen.
Das folgende Python-Beispiel entfernt „ "trial" “ aus dem ARRAY-Feld „ tags “ der Entität, deren Primärschlüssel „ 1 “ lautet:
from pymilvus import FieldOp, MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
client.upsert(
collection_name="users",
data=[{"pk": 1, "tags": ["trial"]}],
field_ops={"tags": FieldOp.array_remove()},
)
Das Verknüpfen von „ ARRAY_REMOVE “ mit einem Feld über „ field_ops “ ermöglicht die Semantik der Teilaktualisierung für dieses Feld. Informationen zum vollständigen Arbeitsablauf, zu den unterstützten Elementtypen und zu den Einschränkungen finden Sie unter „Upsert-ARRAY-Felder im Merge-Modus“.