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):

  1. Vergleichsausdruck
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
  1. Logische Operationen und Klammern
"(int64 > 0 && int64 < 400) oder (int64 > 500 && int64 < 1000)"
  1. 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"]
  1. TermExpr, BinaryLogicalOp und CmpOp (auf verschiedenen Feldern)
"int64 in [1, 2, 3] und float != 2"
  1. BinaryLogicalOp und CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
  1. CmpOp und UnaryArithOp oder BinaryArithOp
"200+300 < int64"
  1. MatchOp (Präfixübereinstimmung)
VARCHAR like "prefix%"
  1. 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 wie JSON_CONTAINS.

json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false