Aturan Ekspresi Boolean
Pada bab ini, akan dijelaskan cara menulis ekspresi kondisi kueri.
Gambaran
Ekspresi predikat menghasilkan nilai boolean. Milvus menyaring skalar dengan menggunakan predikat. Saat mengevaluasi ekspresi predikat, akan mengembalikan NILAI_BENAR atau NILAI_SALAH. Silakan merujuk ke referensi API SDK Python untuk panduan penggunaan ekspresi predikat.
Operator
Operator Logis
Operator logis membandingkan dua ekspresi.
Simbol | Operasi | Contoh | Deskripsi |
---|---|---|---|
'and' && | DAN | expr1 && expr2 | Mengembalikan Benar saat expr1 dan expr2 keduanya benar. |
'or' || | ATAU | expr1 || expr2 | Mengembalikan Benar saat salah satu dari expr1 atau expr2 benar. |
Operator Aritmatika Biner
Operator aritmatika biner mengambil dua operan dan melakukan operasi aritmatika dasar, mengembalikan hasil yang sesuai.
Simbol | Operasi | Contoh | Deskripsi |
---|---|---|---|
+ | Penambahan | a + b | Menambahkan dua operan bersama. |
- | Pengurangan | a - b | Mengurangkan operan kedua dari operan pertama. |
* | Perkalian | a * b | Mengalikan kedua operan. |
/ | Pembagian | a / b | Membagi operan pertama dengan operan kedua. |
** | Pemangkatan | a ** b | Menaikkan operan pertama ke pangkat kedua. |
% | Modulo | a % b | Membagi operan pertama dengan operan kedua dan mengembalikan sisa bagi. |
Operator Relasional
Operator relasional menggunakan simbol untuk memeriksa kesetaraan, ketidaksamaan, atau urutan relatif antara dua ekspresi.
Simbol | Operasi | Contoh | Deskripsi |
---|---|---|---|
< | Kurang dari | a < b | Mengembalikan Benar jika a kurang dari b. |
> | Lebih dari | a > b | Mengembalikan Benar jika a lebih dari b. |
== | Sama dengan | a == b | Mengembalikan Benar jika a sama dengan b. |
!= | Tidak sama dengan | a != b | Mengembalikan Benar jika a tidak sama dengan b. |
<= | Kurang dari atau sama dengan | a <= b | Mengembalikan Benar jika a kurang dari atau sama dengan b. |
>= | Lebih dari atau sama dengan | a >= b | Mengembalikan Benar jika a lebih dari atau sama dengan b. |
Prioritas Operator dan Asosiativitas
Tabel berikut mencantumkan prioritas dan asosiativitas operator. Operator terdaftar berdasarkan prioritas dari atas ke bawah.
Prioritas | Operator | Deskripsi | Asosiativitas |
---|---|---|---|
1 | + - | Operator aritmatika uner | Kiri ke kanan |
2 | not | Operator logis uner | Kanan ke kiri |
3 | ** | Operator aritmatika biner | Kiri ke kanan |
4 | * / % | Operator aritmatika biner | Kiri ke kanan |
5 | + - | Operator aritmatika biner | Kiri ke kanan |
6 | < <= > >= | Operator perbandingan | Kiri ke kanan |
7 | == != | Operator perbandingan | Kiri ke kanan |
8 | like LIKE | Operator pencocokan | Kiri ke kanan |
9 | json_contains JSON_CONTAINS | Operator JsonArray | Kiri ke kanan |
10 | json_contains_all JSON_CONTAINS_ALL | Operator JsonArray | Kiri ke kanan |
11 | json_contains_any JSON_CONTAINS_ANY | Operator JsonArray | Kiri ke kanan |
12 | && and | Operator logis biner | Kiri ke kanan |
13 | || or | Operator logis biner | Kiri ke kanan |
Ekspresi biasanya dievaluasi dari kiri ke kanan. Ekspresi kompleks dievaluasi satu per satu. Urutan evaluasi ekspresi ditentukan oleh prioritas operator yang digunakan.
Jika suatu ekspresi mengandung dua atau lebih operator dengan prioritas yang sama, operator terkiri dievaluasi terlebih dahulu.
Sebagai contoh, 10 / 2 * 5 akan dievaluasi sebagai (10 / 2) dan hasilnya akan dikalikan dengan 5.
Ketika perlu untuk memberikan prioritas operasi dengan prioritas lebih rendah, operasi tersebut harus dimasukkan dalam tanda kurung.
Sebagai contoh, 30 / 2 + 8. Biasanya dihitung sebagai 30 dibagi 2, dan kemudian 8 ditambahkan ke hasilnya. Jika Anda ingin membagi dengan 2 + 8, harus ditulis sebagai 30 / (2 + 8).
Tanda kurung dapat bersarang dalam suatu ekspresi. Tanda kurung paling dalam dievaluasi terlebih dahulu.
Contoh kondisi-kondisi
Berikut adalah beberapa contoh dari semua ekspresi boolean yang tersedia di Milvus (int64
mewakili bidang skalar yang berisi data tipe INT64, float
mewakili bidang skalar yang berisi data tipe floating-point, dan VARCHAR
mewakili bidang skalar yang berisi data tipe VARCHAR):
- Ekspresi perbandingan
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- Operasi logika dan tanda kurung
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- Ekspresi in
Milvus hanya mendukung penghapusan entitas dengan kunci utama yang secara eksplisit ditentukan, yang hanya dapat dicapai melalui ekspresi in
.
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr, BinaryLogicalOp, dan CmpOp (pada bidang yang berbeda)
"int64 in [1, 2, 3] and float != 2"
- BinaryLogicalOp dan CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp dan UnaryArithOp atau BinaryArithOp
"200+300 < int64"
- MatchOp (pencocokan awalan)
VARCHAR like "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
Jika ekspresi JSON dalam pernyataan
JSON_CONTAINS
(parameter kedua) merupakan daftar, identifikasi (parameter pertama) harus menjadi daftar dari daftar. Jika tidak, pernyataan tersebut selalu dievaluasi sebagai 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)
Ekspresi JSON dalam pernyataan
JSON_CONTAINS_ALL
harus selalu berupa daftar.
json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6 tidak ada)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
Ekspresi JSON dalam pernyataan
JSON_CONTAINS_ANY
harus selalu berupa daftar. Jika tidak, perilakunya sama sepertiJSON_CONTAINS
.
json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false