Regeln für Boolesche Ausdrücke
In diesem Kapitel wird erläutert, wie man Abfragebedingungsausdrücke schreibt.
Übersicht
Ein Prädikat-Ausdruck gibt einen booleschen Wert aus. Milvus filtert Skalare, indem es Prädikate verwendet. Beim Auswerten eines Prädikat-Ausdrucks wird TRUE oder FALSE zurückgegeben. Bitte beachten Sie die Python SDK API-Referenz für Anleitungen zur Verwendung von Prädikat-Ausdrücken.
Operatoren
Logische Operatoren
Logische Operatoren vergleichen zwei Ausdrücke.
Symbol | Operation | Beispiel | Beschreibung |
---|---|---|---|
'and' && | UND | expr1 && expr2 | Gibt True zurück, wenn sowohl expr1 als auch expr2 wahr sind. |
'or' || | ODER | expr1 || expr2 | Gibt True zurück, wenn entweder expr1 oder expr2 wahr ist. |
Binäre arithmetische Operatoren
Binäre arithmetische Operatoren nehmen zwei Operanden und führen grundlegende arithmetische Operationen aus, indem sie das entsprechende Ergebnis zurückgeben.
Symbol | Operation | Beispiel | Beschreibung |
---|---|---|---|
+ | Addition | a + b | Addiert die beiden Operanden zusammen. |
- | Subtraktion | a - b | Subtrahiert den zweiten Operanden vom ersten. |
* | Multiplikation | a * b | Multipliziert die beiden Operanden. |
/ | Division | a / b | Dividiert den ersten Operanden durch den zweiten. |
** | Potenzierung | a ** b | Erhebt den ersten Operanden zur Potenz des zweiten. |
% | Modulo | a % b | Dividiert den ersten Operanden durch den zweiten und gibt den Rest zurück. |
Relationale Operatoren
Relationale Operatoren verwenden Symbole, um die Gleichheit, Ungleichheit oder die relative Reihenfolge zwischen zwei Ausdrücken zu überprüfen.
Symbol | Operation | Beispiel | Beschreibung |
---|---|---|---|
< | Kleiner als | a < b | Gibt True zurück, wenn a kleiner als b ist. |
> | Größer als | a > b | Gibt True zurück, wenn a größer als b ist. |
== | Gleich | a == b | Gibt True zurück, wenn a gleich b ist. |
!= | Ungleich | a != b | Gibt True zurück, wenn a ungleich b ist. |
<= | Kleiner als oder gleich | a <= b | Gibt True zurück, wenn a kleiner oder gleich b ist. |
>= | Größer als oder gleich | a >= b | Gibt True zurück, wenn a größer oder gleich b ist. |
Operator Vorrang und Assoziativität
Die folgende Tabelle listet die Vorrang und Assoziativität der Operatoren auf. Die Operatoren werden in der Reihenfolge des Vorrangs von oben nach unten aufgelistet.
Vorrang | Operator | Beschreibung | Assoziativität |
---|---|---|---|
1 | + - | Unäre arithmetische Operatoren | Von links nach rechts |
2 | not | Unärer logischer Operator | Von rechts nach links |
3 | ** | Binärer arithmetischer Operator | Von links nach rechts |
4 | * / % | Binärer arithmetischer Operator | Von links nach rechts |
5 | + - | Binärer arithmetischer Operator | Von links nach rechts |
6 | < <= > >= | Vergleichsoperatoren | Von links nach rechts |
7 | == != | Vergleichsoperatoren | Von links nach rechts |
8 | like LIKE | Suchoperator | Von links nach rechts |
9 | json_contains JSON_CONTAINS | JsonArray-Operator | Von links nach rechts |
10 | json_contains_all JSON_CONTAINS_ALL | JsonArray-Operator | Von links nach rechts |
11 | json_contains_any JSON_CONTAINS_ANY | JsonArray-Operator | Von links nach rechts |
12 | && and | Binärer logischer Operator | Von links nach rechts |
13 | || or | Binärer logischer Operator | Von links nach rechts |
Ausdrücke werden in der Regel von links nach rechts ausgewertet. Komplexe Ausdrücke werden einzeln ausgewertet. Die Reihenfolge der Auswertung von Ausdrücken wird durch den Vorrang der verwendeten Operatoren bestimmt.
Wenn ein Ausdruck zwei oder mehr Operatoren mit dem gleichen Vorrang enthält, wird der linksseitige Operator zuerst ausgewertet.
Beispiel: 10 / 2 * 5 wird als (10 / 2) ausgewertet und das Ergebnis wird mit 5 multipliziert.
Wenn es notwendig ist, Operationen mit niedrigerem Vorrang zu priorisieren, sollten sie in Klammern eingeschlossen werden.
Beispiel: 30 / 2 + 8. Es wird üblicherweise als 30 geteilt durch 2 berechnet, und dann wird 8 zum Ergebnis hinzugefügt. Wenn Sie durch 2 + 8 dividieren möchten, sollte es als 30 / (2 + 8) geschrieben werden.
Klammern können innerhalb eines Ausdrucks verschachtelt werden. Die innersten Klammern werden zuerst ausgewertet.
Beispielkonditionen
Hier sind einige Beispiele für alle verfügbaren booleschen Ausdrücke in Milvus (int64
repräsentiert ein skalares Feld mit INT64-Daten, float
repräsentiert ein skalares Feld mit Gleitkommazahlen und VARCHAR
repräsentiert ein skalares Feld mit VARCHAR-Daten):
- Vergleichsausdruck
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- Logische Operationen und Klammern
"(int64 > 0 && int64 < 400) oder (int64 > 500 && int64 < 1000)"
- in-Ausdruck
Milvus unterstützt nur das Löschen von Entitäten mit explizit definierten Primärschlüsseln, was nur durch den Term-Ausdruck in
erreicht werden kann.
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr, BinaryLogicalOp und CmpOp (auf verschiedenen Feldern)
"int64 in [1, 2, 3] und float != 2"
- BinaryLogicalOp und CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp und UnaryArithOp oder BinaryArithOp
"200+300 < int64"
- MatchOp (Präfixübereinstimmung)
VARCHAR like "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
Wenn der JSON-Ausdruck im
JSON_CONTAINS
(zweiter Parameter) eine Liste ist, sollte der Bezeichner (erster Parameter) eine Liste von Listen sein. Andernfalls wird die Anweisung immer zu False ausgewertet.
json_contains(x, 1) # ==> true
json_contains(x, "a") # ==> false
json_contains(x, [1,2,3]) # ==> true
json_contains(x, [3,2,1]) # ==> false
-
JSON_CONTAINS_ALL(identifier, JsonExpr)
Der JSON-Ausdruck in der Anweisung
JSON_CONTAINS_ALL
sollte immer eine Liste sein.
json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6 existiert nicht)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
Der JSON-Ausdruck in der Anweisung
JSON_CONTAINS_ANY
sollte immer eine Liste sein. Andernfalls verhält es sich genauso wieJSON_CONTAINS
.
json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false