All Products
Search
Document Center

OpenSearch:Pengambilan indeks - klausa kueri

Last Updated:Jun 26, 2026

Topik ini menjelaskan sintaks dan penggunaan klausa query untuk pengambilan indeks.

Ikhtisar

Klausa query wajib digunakan dalam setiap permintaan pencarian. Klausa ini menentukan konten yang akan dicari dalam bidang indeks tertentu serta mendefinisikan hubungan antara beberapa kondisi kueri menggunakan operator logika seperti AND, OR, ANDNOT, dan RANK.

Sebagai contoh, Anda dapat menggabungkan dua bidang bertipe TEXT, seperti title dan subject, menjadi satu indeks komposit bernama default. Pencarian terhadap indeks default kemudian mengambil dokumen yang kueri pencariannya cocok dengan konten salah satu bidang sumber, yaitu title atau subject.

Sebagai alternatif, jika Anda membuat indeks bernama title_search berdasarkan hanya pada bidang title, kueri terhadap title_search hanya akan mengembalikan dokumen yang kueri pencariannya cocok dengan konten bidang title.

Sintaks

Kondisi kueri menggunakan format berikut:

Kueri standar: index:'search query'^boost

Pencarian rentang: index:'circle(longitude latitude,radius)'

Pencarian rentang: index:[value1,value2]

  • index: Nama bidang indeks yang akan dicari, sebagaimana didefinisikan dalam skema indeks Anda. Pencarian menemukan dokumen di mana kueri pencarian muncul di salah satu bidang sumber yang membentuk bidang indeks ini.

  • search query: Konten yang ingin Anda cari.

  • boost: Peningkatan relevansi yang diterapkan pada kueri pencarian. Nilainya harus berupa bilangan bulat dari 0 hingga 99. Jika tidak ditentukan, nilai default-nya adalah 99. Parameter ini bersifat opsional dan hanya berlaku jika fungsi exact_match_boost() dikonfigurasi dalam ekspresi penyortiran kasar.

  • Anda dapat menggabungkan beberapa kondisi kueri dengan menggunakan operator logika berikut: (), AND, OR, ANDNOT, dan RANK. Operator-operator ini harus ditulis dalam huruf kapital. Operator dievaluasi berdasarkan urutan prioritas berikut, dari terendah ke tertinggi: RANK<OR<AND<ANDNOT<().

  • Untuk melakukan kueri frasa, masukkan kueri pencarian di dalam tanda kutip ganda (""). Kueri frasa menemukan dokumen di mana istilah yang telah dianalisis muncul dalam urutan dan posisi yang sama seperti dalam frasa aslinya.

  • Pencarian rentang mendukung kueri berdasarkan lokasi geografis dan rentang numerik. Untuk informasi lebih lanjut, lihat pencarian rentang.

Catatan penggunaan

  • Klausa query wajib digunakan dan tidak boleh kosong.

  • Operator ANDNOT tidak dapat digunakan sendirian. Kondisi kueri di sebelah kiri ANDNOT tidak boleh kosong, misalnya index_name:''.

  • Jika operator RANK tidak berada di akhir kueri, seperti pada index1:'xxx' RANK index2:'xxx' AND index3:'xxx', Anda harus mengelompokkan operasi RANK dengan tanda kurung, contohnya: (index1:'xxx' RANK index2:'xxx') AND index3:'xxx'. Jika tidak, semua kondisi berikutnya akan dimasukkan ke dalam operasi RANK, sehingga kueri tersebut diinterpretasikan sebagai index1:'xxx' RANK (index2:'xxx' AND index3:'xxx').

  • Anda harus membungkus kueri pencarian dengan tanda kutip tunggal (' ') atau ganda (" "). Jika tidak, kueri mungkin gagal, tidak mengembalikan hasil, atau menghasilkan perilaku yang tidak terduga.

  • Anda hanya dapat menggunakan bidang TEXT atau SHORT_TEXT untuk membuat indeks komposit.

  • Jika nilai boost kurang dari 0, nilai tersebut dianggap sebagai 0. Jika lebih dari 99, nilai tersebut dianggap sebagai 99.

  • Untuk informasi lebih lanjut tentang cara berbagai jenis pencarian diproses, lihat alat analisis bawaan.

Contoh

  1. Cari dokumen yang bidang indeks title-nya berisi "Peking University":

    query=title:'Peking University'
  2. Cari dokumen yang bidang indeks title-nya berisi "Peking University" dan "Zhejiang University":

    query=title:'Peking University' AND title:'Zhejiang University'
  3. Cari dokumen yang bidang indeks title-nya berisi "Peking University" atau "Zhejiang University", dan bidang type-nya bernilai "1":

    query=(title:'Peking University' OR title:'Zhejiang University') AND type:'1'
  4. Cari dokumen yang bidang indeks title-nya berisi "Peking University" atau "Zhejiang University". Contoh ini menunjukkan sintaks alternatif untuk OR:

    query=title:'Peking University'|'Zhejiang University'
  5. Cari dokumen yang bidang indeks title-nya berisi Peking University tetapi tidak berisi Tsinghua. Jika title juga berisi President, beri peringkat lebih tinggi pada dokumen tersebut:

    query=(title:'Peking University' ANDNOT title:'Tsinghua') RANK title:'President'
    // Ekspresi penyortiran halus: text_relevance(title)
  6. Cari dokumen yang bidang indeks title-nya berisi frasa eksak Peking University. Hal ini mencegah pencocokan dengan dokumen yang memiliki istilah serupa namun terpisah, seperti "University of Beijing":

    query=title:"Peking University"
  7. Cari bidang bertipe INT_ARRAY:

    // Asumsikan Anda memiliki bidang INT_ARRAY yang diindeks sebagai arr_index_1.
    // Kueri ini mengambil dokumen apa pun yang array-nya berisi nilai 1.
    query=arr_index_1:'1'
  8. Cari bidang bertipe LITERAL_ARRAY: LITERAL_ARRAY adalah array konstanta string di mana setiap elemen tidak ditokenisasi dan hanya mendukung pencocokan eksak. Asumsikan Anda memiliki bidang LITERAL_ARRAY yang diindeks sebagai tags_index:

    // Dokumen diambil jika ada elemen dalam array yang merupakan pencocokan eksak untuk 'Red'.
    // Catatan: Karena LITERAL_ARRAY melakukan pencocokan eksak, kueri pencarian harus identik dengan elemen array. Misalnya, jika suatu elemen adalah 'Peking University', pencarian untuk 'Peking' tidak akan menghasilkan kecocokan.
    query=tags_index:'Red'
    
    // Cari dokumen yang array-nya berisi 'Red' atau 'Blue'.
    query=tags_index:'Red' OR tags_index:'Blue'