Klausa `filter` menyaring hasil pencarian berdasarkan kondisi bidang. Topik ini mencakup sintaksis, catatan penggunaan, dan contoh.
Deskripsi klausa
Fitur penyaringan mempersempit dokumen yang dikembalikan oleh klausa `query` berdasarkan kondisi yang ditentukan dan menghasilkan set hasil akhir.
Sintaksis
Format kondisi filter adalah `field=value`.
-
Kondisi filter mendukung operator kondisional umum, seperti `>`, `<`, `=`, `<=`, `>=`, `!=`, `in`, dan `notin`. Kondisi ini juga mendukung operator aritmetika, seperti `+`, `-`, `*`, `/`, `&`, `^`, dan `|`.
-
Beberapa kondisi filter dapat digabungkan menggunakan operator logika `AND` dan `OR`, serta dikelompokkan dengan tanda kurung `()`. Operator logika harus ditulis dalam huruf kapital.
Catatan
-
Klausa `filter` bersifat opsional.
-
Bidang yang digunakan dalam klausa `filter` harus dikonfigurasikan sebagai bidang properti dalam skema aplikasi.
-
Karena potensi masalah presisi, pemeriksaan kesamaan eksak tidak dapat dilakukan pada tipe data `FLOAT` dan `DOUBLE`. Untuk tipe ini, gunakan kondisi rentang dengan `>` dan `<` sebagai gantinya.
-
Nilai untuk bidang bertipe `LITERAL` harus diapit tanda kutip ganda ("") dalam klausa `filter`. Jika tidak, error 6135 (kesalahan tipe ekspresi konstan) akan dikembalikan. Operasi relasional didukung untuk bidang `LITERAL`, tetapi operasi aritmetika tidak didukung.
-
Fungsi fitur seperti fungsi jarak dapat digunakan dalam klausa filter.
-
Untuk bidang bertipe `LITERAL`, penyaringan hanya mendukung operator `=` (sama dengan) dan `!=` (tidak sama dengan). Operator relasional seperti `>` dan `<` tidak didukung. Bidang `LITERAL` tidak mengalami tokenisasi dan karenanya memerlukan kecocokan eksak.
-
Operator `in` dan `notin` memeriksa apakah nilai bidang terdapat dalam daftar yang ditentukan. Operator ini mendukung tipe `INT`, `LITERAL`, `FLOAT`, dan `DOUBLE`, tetapi tidak mendukung tipe `ARRAY`, `TEXT`, atau tipe dengan tokenisasi fuzzy. Untuk informasi lebih lanjut, lihat in and notin.
-
Tipe bidang yang mengalami tokenisasi, seperti `TEXT` dan `SHORT_TEXT`, tidak dapat dikonfigurasikan sebagai bidang properti. Hanya tipe bidang numerik dan non-tokenisasi yang dapat dikonfigurasikan sebagai bidang properti. Tipe yang didukung meliputi `INT`, `INT_ARRAY`, `FLOAT`, `FLOAT_ARRAY`, `DOUBLE`, `DOUBLE_ARRAY`, `LITERAL`, dan `LITERAL_ARRAY`.
Menggunakan fungsi
-
distance: Menghitung jarak bola antara dua titik, biasanya digunakan untuk layanan berbasis lokasi (LBS).
Contoh:
Cari restoran bernama `Waipojia` dalam radius 10 km dari pengguna di lokasi (120,34256, 30,56982). Bidang `lon` dan `lat` merepresentasikan bujur dan lintang pedagang, disimpan dalam dokumen, dan harus dikonfigurasikan sebagai bidang properti.
query=default:'Grandma's Home'&&filter=distance(lon,lat,"120.34256","30.56982")
-
in_polygon: Memeriksa apakah suatu titik berada di dalam poligon, biasanya digunakan untuk menentukan apakah suatu lokasi berada dalam area pengiriman.
Contoh:
Tentukan apakah pengguna di lokasi (120,307234, 39,294245) berada dalam area pengiriman pedagang. Area pengiriman didefinisikan dalam bidang `coordinates`, dan kueri menyaring pedagang yang area pengirimannya mencakup lokasi pengguna.
query=default:'food'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0
-
in_query_polygon: Memeriksa apakah titik yang ditentukan dalam dokumen berada di dalam poligon yang ditentukan dalam kueri.
Contoh:
Cari restoran `Waipojia` di dalam kawasan perbelanjaan Intime, yang didefinisikan oleh poligon (xA,yA,xB,Yb,xC,Yc;xD,yD,xE,yE,xF,yF,xG,yG). Lokasi pedagang disimpan dalam bidang `point`.
query=default:'Grandma's Home'&&filter=in_query_polygon("polygons",point)>0&&kvpairs=polygons:xA\,yA\,xB\,Yb\,xC\,Yc;xD\,yD\,xE\,yE\,xF\,yF\,xG\,yG
-
bit_struct: Melakukan pengelompokan kustom pada bidang `INT_ARRAY` dan menjalankan operasi tertentu pada nilai-nilai yang dikelompokkan.
Contoh:
Cari toko yang buka selama periode waktu tertentu. Sebuah dokumen berisi bidang `int64_array` bernama `open_time`, di mana setiap nilai merepresentasikan interval waktu buka. 32 bit tinggi dari nilai int64 merepresentasikan waktu mulai, dan 32 bit rendah merepresentasikan waktu selesai. Untuk mencari toko yang buka dari pukul 14.00 hingga 15.30, ubah waktu tersebut menjadi interval berbasis menit yang dimulai dari pukul 00.00 pada hari yang sama. Periode dari pukul 14.00 hingga 15.30 direpresentasikan sebagai (840, 930).
filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1
-
fieldlen: Mengembalikan panjang bidang bertipe `LITERAL`.
Contoh:
Kembalikan dokumen di mana bidang `usr_name` tidak kosong.
query=default:'keyword'&&filter=fieldlen(usr_name)>0
-
in/notin: Memeriksa apakah nilai bidang ada atau tidak ada dalam daftar yang ditentukan.
Contoh:
Kueri untuk dokumen yang berisi `iphone` dan bidang `type`-nya, yang bertipe INT, memiliki nilai 1, 2, atau 3.
query=default:'iphone'&&filter=in(type, "1|2|3")
Kueri untuk dokumen yang berisi `iphone` dan bidang `type`-nya, yang bertipe INT32, tidak memiliki nilai 1, 2, atau 3.
query=default:'iphone'&&filter=notin(type, "1|2|3")
-
multi_attr: Mengembalikan nilai pada posisi tertentu dalam bidang array.
Contoh:
Sebuah Produk memiliki beberapa harga, seperti harga pasar, harga diskon, dan harga penjualan, yang disimpan dalam bidang array `prices`. Kueri berikut mencari ponsel dengan harga penjualan kurang dari 1.000.
query=default:'mobile phone'&&filter=multi_attr(price,2)<1000
Contoh
-
Sebuah aplikasi memiliki bidang `int32` bernama `category`, di mana nilai-nilainya merepresentasikan kategori berbeda seperti 1 untuk berita dan 2 untuk bbs. Kueri berikut mencari dokumen yang berisi `Zheda` dan termasuk dalam kategori 2 (bbs).
query=default:'Zheda' AND category_search:'2' // Bidang indeks bernama category_search dibuat untuk bidang category. // atau query=default:'Zheda'&&filter=category=2 -
Aplikasi pencarian buku menggunakan bidang `LITERAL_ARRAY` bernama `tags` untuk menyimpan tag genre seperti "palace drama", "suspense/horror", dan "romance". Kueri berikut mencari dokumen yang berisi "The Legend of Zhen Huan" dan memiliki tag "palace drama".
query=default:'The Legend of Zhen Huan'&&filter=tags="palace drama" -
Aplikasi E-dagang memiliki bidang `int32` untuk `hit` (klik), bidang `int32` untuk `sale` (penjualan), dan bidang `int64` untuk `create_time`. Kueri berikut mencari dokumen yang berisi "dress", di mana jumlah penjualan dan klik dikalikan dengan `rate` (laju offset) melebihi 10.000, dan waktu pembuatan lebih awal dari 1402345600.
query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600