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

  1. Ekspresi perbandingan
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
  1. Operasi logika dan tanda kurung
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
  1. 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"]
  1. TermExpr, BinaryLogicalOp, dan CmpOp (pada bidang yang berbeda)
"int64 in [1, 2, 3] and float != 2"
  1. BinaryLogicalOp dan CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
  1. CmpOp dan UnaryArithOp atau BinaryArithOp
"200+300 < int64"
  1. MatchOp (pencocokan awalan)
VARCHAR like "prefix%"
  1. 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 seperti 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