All Products
Search
Document Center

OpenSearch:klausa filter

Last Updated:Jun 26, 2025

Ikhtisar

Klausa filter digunakan untuk mencari dokumen yang relevan bagi pengguna berdasarkan kondisi kueri. Anda dapat menggunakan klausa filter untuk menyaring dokumen hasil pencarian dengan klausa query guna mendapatkan dokumen yang diperlukan.

Sintaksis

Format kondisi filter: field=value

  • Kondisi filter mendukung operator kondisional reguler seperti >, <, =, <=, >=, !=, in, dan notin, serta operator aritmatika seperti +, -, *, /, &, ^, dan |.

  • Anda dapat menentukan beberapa kondisi filter dan menghubungkannya menggunakan operator logika berikut: AND, OR, dan (). Operator logika harus ditulis dalam huruf besar.

Batasan

  1. Klausa filter bersifat opsional.

  2. Bidang yang dirujuk dalam parameter klausa filter harus dikonfigurasi sebagai bidang atribut saat mendefinisikan skema aplikasi.

  3. Ekuivalensi tepat tidak dapat diperiksa untuk bidang bertipe FLOAT dan DOUBLE karena masalah presisi. Gunakan > dan < dalam skenario tersebut.

  4. Untuk bidang bertipe LITERAL dalam klausa filter, Anda harus menggunakan tanda kutip ganda (") untuk mengapit nilai bidang. Jika tidak, kode kesalahan 6135 dan pesan berikut akan dikembalikan: Tipe nilai dari ekspresi konstan tidak valid. Bidang bertipe LITERAL mendukung operasi relasional tetapi tidak mendukung operasi aritmatika.

  5. Anda dapat menggunakan fungsi fungsionalitas seperti fungsi jarak dalam klausa filter untuk pengurutan.

  6. Untuk menyaring bidang bertipe LITERAL, Anda hanya dapat menggunakan operator = (sama dengan) dan != (tidak sama dengan), tetapi tidak dapat menggunakan operator relasional seperti > dan <. Bidang bertipe LITERAL tidak di-tokenisasi, sehingga pencocokan tepat diperlukan.

  7. Anda dapat menggunakan fungsi in atau notin untuk memeriksa apakah nilai bidang ada dalam daftar tertentu. Hanya bidang bertipe INT, LITERAL, FLOAT, dan DOUBLE yang didukung. Bidang bertipe ARRAY dan TEXT atau tipe yang menggunakan analyzer untuk pencarian fuzzy tidak didukung. Untuk informasi lebih lanjut, lihat in dan notin.

  8. Anda tidak dapat membuat bidang atribut menggunakan bidang bertipe teks seperti TEXT dan SHORT_TEXT. Anda hanya dapat membuat bidang atribut menggunakan bidang bertipe numerik atau non-teks seperti INT, INT_ARRAY, FLOAT, FLOAT_ARRAY, DOUBLE, DOUBLE_ARRAY, LITERAL, dan LITERAL_ARRAY.

Fungsi fungsionalitas yang didukung

  • distance: Mengembalikan jarak bola antara dua titik. Secara umum, fungsi ini digunakan dalam perhitungan jarak untuk layanan berbasis lokasi (LBS).

Contoh:

Cari KFC dalam radius 10 kilometer dari koordinat pengguna. Dalam contoh ini, bujur dan lintang koordinat pengguna adalah 120.34256 dan 30.56982. Bidang lon dan lat yang menunjukkan bujur dan lintang KFC harus dikonfigurasi sebagai bidang atribut.

query=default:'KFC'&&sort=+distance(lon,lat,"120.34256","30.56982")
  • in_polygon: Memeriksa apakah sebuah titik berada dalam area geografis poligon tertentu. Secara umum, fungsi ini digunakan untuk menentukan apakah pengguna berada dalam radius pengiriman pedagang.

Contoh:

Periksa apakah pengguna berada dalam radius pengiriman pedagang. Sebagai contoh, bidang coordinates menunjukkan radius pengiriman pedagang, dan koordinat pengguna adalah (120.307234, 39.294245). Kemudian, Anda dapat menggunakan klausa query berikut untuk mencari pedagang yang radius pengirimannya mencakup pengguna:

query=default:'Makanan'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0
  • in_query_polygon: Memeriksa apakah titik yang ditentukan dalam dokumen berada dalam area geografis poligon tertentu.

Contoh:

Cari KFC di distrik bisnis Yintai (xA,yA,xB,Yb,xC,Yc;xD,yD,xE,yE,xF,yF,xG,yG). Bidang point digunakan untuk menyimpan lokasi geografis KFC.

query=default:'KFC'&&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: Membagi setiap nilai menjadi beberapa bagian untuk bidang bertipe INT_ARRAY dan melakukan operasi tertentu pada bagian-bagian tersebut.

Contoh:

Cari toko yang buka pada periode waktu tertentu. Dokumen Anda memiliki bidang open_time bertipe INT64_ARRAY. Setiap bilangan bulat 64-bit dalam array menunjukkan jam operasional toko. 32 bit pertama dari bilangan bulat menunjukkan waktu toko dibuka, sedangkan 32 bit terakhir menunjukkan waktu toko ditutup. Jika Anda ingin mencari toko yang buka dari pukul 14:00 hingga 15:30, Anda harus terlebih dahulu mengonversi masing-masing waktu mulai dan akhir ke jumlah menit yang telah berlalu sejak pukul 00:00 pada hari yang sama. Dalam contoh ini, 14:00 dikonversi menjadi 840, dan 15:30 dikonversi menjadi 930.

filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1
  • fieldlen: Menghitung panjang bidang bertipe LITERAL.

Contoh:

Cari dokumen di mana nilai bidang usr_name tidak kosong.

query=default:'Kata Kunci'&&filter=fieldlen(usr_name)>0
  • in atau notin: Memeriksa apakah nilai bidang ada dalam daftar tertentu.

Contoh:

Ambil dokumen yang berisi "iphone" dan bidang type yang nilainya 1, 2, atau 3. Bidang type bertipe INT.

query=default:'iphone'&&filter=in(type, "1|2|3")

Ambil dokumen yang berisi "iphone" dan bidang type yang nilainya bukan 1, 2, atau 3. Bidang type bertipe INT32.

query=default:'iphone'&&filter=notin(type, "1|2|3")
  • multi_attr: Mengembalikan nilai pada posisi tertentu dalam bidang array.

Contoh:

Komoditas memiliki beberapa harga, termasuk harga pasar, harga diskon, dan harga penjualan. Harga dicatat dalam bidang prices. Anda dapat menggunakan klausa query berikut untuk mencari ponsel yang harga penjualannya kurang dari 1.000:

query=default:'Ponsel'&&filter=multi_attr(price,2)<1000

Contoh-contoh

  1. Bidang category bertipe INT32 dalam aplikasi memiliki nilai seperti 1 (berita) dan 2 (bbs). Anda dapat menggunakan salah satu klausa query berikut untuk mencari dokumen yang berisi "Universitas Zhejiang" dan di mana bidang category disetel ke 2:

    query=default:'Universitas Zhejiang' AND category_search:'2' // Bidang indeks category_search dibuat untuk bidang category.
      // Atau
     query=default:'Universitas Zhejiang'&&filter=category=2
  2. Dalam aplikasi yang digunakan untuk mencari novel, bidang tags bertipe STRING_ARRAY menentukan tag berikut berdasarkan gaya novel: istana, ketegangan dan horor, dan romansa. Anda dapat menggunakan klausa query berikut untuk mencari dokumen yang berisi "Empresses in the Palace" dan di mana bidang tags memiliki nilai "istana":

    query=default:'Empresses in the Palace'&&filter=tags="istana"
  3. Bidang hit dan sale bertipe INT32 dan bidang create_time bertipe INT64 ada dalam aplikasi e-commerce. Anda dapat menggunakan klausa query berikut untuk mencari dokumen yang memenuhi kondisi berikut: 1. Dokumen berisi "dress". 2. Hasil kali nilai bidang rate dan jumlah nilai bidang hit dan sale melebihi 10.000. 3. Nilai bidang create_time kurang dari 1.402.345.600.

    query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600