Zasady wyrażeń logicznych
Ten rozdział przedstawia, jak pisać wyrażenia warunkowe zapytań.
Przegląd
Wyrażenie predykatu zwraca wartość logiczną. Milvus filtruje skalary, używając predykatów. Podczas oceny wyrażenia predykatu zwraca TRUE lub FALSE. Proszę odnieść się do referencji API Python SDK w celu uzyskania wskazówek dotyczących używania wyrażeń predykatów.
Operatory
Operatory logiczne
Operatory logiczne porównują dwa wyrażenia.
Symbol | Operacja | Przykład | Opis |
---|---|---|---|
'and' && | AND | expr1 && expr2 | Zwraca True, gdy zarówno expr1, jak i expr2 są prawdziwe. |
'or' || | OR | expr1 || expr2 | Zwraca True, gdy albo expr1, albo expr2 jest prawdziwe. |
Operatory arytmetyczne binarne
Operatory arytmetyczne binarne przyjmują dwie wartości i wykonują podstawowe operacje arytmetyczne, zwracając odpowiedni wynik.
Symbol | Operacja | Przykład | Opis |
---|---|---|---|
+ | Dodawanie | a + b | Dodaje obie wartości do siebie. |
- | Odejmowanie | a - b | Odejmuje drugą wartość od pierwszej. |
* | Mnożenie | a * b | Mnoży obie wartości. |
/ | Dzielenie | a / b | Dzieli pierwszą wartość przez drugą. |
** | Potęgowanie | a ** b | Podnosi pierwszą wartość do potęgi drugiej. |
% | Reszta z dzielenia | a % b | Dzieli pierwszą wartość przez drugą i zwraca resztę. |
Operatory relacyjne
Operatory relacyjne używają symboli do sprawdzania równości, nierówności lub porządku między dwoma wyrażeniami.
Symbol | Operacja | Przykład | Opis |
---|---|---|---|
< | Mniejsze niż | a < b | Zwraca True, jeśli a jest mniejsze od b. |
> | Większe niż | a > b | Zwraca True, jeśli a jest większe od b. |
== | Równe | a == b | Zwraca True, jeśli a jest równe b. |
!= | Różne | a != b | Zwraca True, jeśli a jest różne od b. |
<= | Mniejsze lub równe | a <= b | Zwraca True, jeśli a jest mniejsze lub równe b. |
>= | Większe lub równe | a >= b | Zwraca True, jeśli a jest większe lub równe b. |
Priorytet i asocjatywność operatorów
Następująca tabela przedstawia priorytet i asocjatywność operatorów. Operatorzy są wymienieni według priorytetu od góry do dołu.
Priorytet | Operator | Opis | Asocjatywność |
---|---|---|---|
1 | + - | Operatory arytmetyczne jednoargumentowe | Lewo do prawo |
2 | not | Operator logiczny jednoargumentowy | Prawo do lewo |
3 | ** | Operator arytmetyczny binarny | Lewo do prawo |
4 | * / % | Operator arytmetyczny binarny | Lewo do prawo |
5 | + - | Operator arytmetyczny binarny | Lewo do prawo |
6 | < <= > >= | Operatory porównania | Lewo do prawo |
7 | == != | Operatory porównania | Lewo do prawo |
8 | like LIKE | Operator dopasowania | Lewo do prawo |
9 | json_contains JSON_CONTAINS | Operator JsonArray | Lewo do prawo |
10 | json_contains_all JSON_CONTAINS_ALL | Operator JsonArray | Lewo do prawo |
11 | json_contains_any JSON_CONTAINS_ANY | Operator JsonArray | Lewo do prawo |
12 | && and | Operator logiczny binarny | Lewo do prawo |
13 | || or | Operator logiczny binarny | Lewo do prawo |
Wyrażenia są zazwyczaj oceniane od lewej do prawej. Złożone wyrażenia są oceniane po jednym. Kolejność oceny wyrażeń jest określona przez priorytet używanych operatorów.
Jeśli wyrażenie zawiera dwa lub więcej operatorów o takim samym priorytecie, najbardziej na lewo znajdujący się operator jest oceniany jako pierwszy.
Na przykład, 10 / 2 * 5 zostanie ocenione jako (10 / 2), a wynik zostanie pomnożony przez 5.
Gdy konieczne jest nadanie priorytetu operacjom o niższym priorytecie, powinny być one zamknięte w nawiasach.
Na przykład, 30 / 2 + 8. Zazwyczaj obliczane jest jako 30 podzielone przez 2, a następnie do wyniku dodawane jest 8. Jeśli chcesz podzielić przez 2 + 8, powinno być napisane jako 30 / (2 + 8).
Nawiasy mogą być zagnieżdżone wewnątrz wyrażenia. Najbardziej wewnętrzne nawiasy są oceniane jako pierwsze.
Przykładowe warunki
Oto kilka przykładów dostępnych wyrażeń logicznych w Milvus (gdzie int64
reprezentuje pole skalara zawierające dane typu INT64, float
oznacza pole skalara zawierające dane zmiennoprzecinkowe, a VARCHAR
oznacza pole skalara zawierające dane typu VARCHAR):
- Wyrażenie porównania
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- Operacje logiczne i nawiasy
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- Wyrażenie
in
Milvus obsługuje jedynie usuwanie jednostek z zdefiniowanymi kluczami głównymi, co można osiągnąć jedynie za pomocą wyrażenia in
.
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr, BinaryLogicalOp i CmpOp (dla różnych pól)
"int64 in [1, 2, 3] and float != 2"
- BinaryLogicalOp i CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp i UnaryArithOp lub BinaryArithOp
"200+300 < int64"
- MatchOp (prefiksowe dopasowanie)
VARCHAR like "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
Jeśli wyrażenie JSON w poleceniu
JSON_CONTAINS
(drugi parametr) jest listą, identyfikator (pierwszy parametr) powinien być listą list. W przeciwnym razie polecenie zawsze zwraca wartość False.
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)
Wyrażenie JSON w poleceniu
JSON_CONTAINS_ALL
powinno zawsze być listą.
json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6 nie istnieje)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
Wyrażenie JSON w poleceniu
JSON_CONTAINS_ANY
powinno zawsze być listą. W przeciwnym razie zachowuje się tak samo jakJSON_CONTAINS
.
json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false