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, danRANK. 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
querywajib digunakan dan tidak boleh kosong. -
Operator
ANDNOTtidak dapat digunakan sendirian. Kondisi kueri di sebelah kiriANDNOTtidak boleh kosong, misalnyaindex_name:''. -
Jika operator
RANKtidak berada di akhir kueri, seperti padaindex1:'xxx' RANK index2:'xxx' AND index3:'xxx', Anda harus mengelompokkan operasiRANKdengan tanda kurung, contohnya:(index1:'xxx' RANK index2:'xxx') AND index3:'xxx'. Jika tidak, semua kondisi berikutnya akan dimasukkan ke dalam operasiRANK, sehingga kueri tersebut diinterpretasikan sebagaiindex1:'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
TEXTatauSHORT_TEXTuntuk membuat indeks komposit. -
Jika nilai
boostkurang 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
-
Cari dokumen yang bidang indeks
title-nya berisi "Peking University":query=title:'Peking University' -
Cari dokumen yang bidang indeks
title-nya berisi "Peking University" dan "Zhejiang University":query=title:'Peking University' AND title:'Zhejiang University' -
Cari dokumen yang bidang indeks
title-nya berisi "Peking University" atau "Zhejiang University", dan bidangtype-nya bernilai "1":query=(title:'Peking University' OR title:'Zhejiang University') AND type:'1' -
Cari dokumen yang bidang indeks
title-nya berisi "Peking University" atau "Zhejiang University". Contoh ini menunjukkan sintaks alternatif untukOR:query=title:'Peking University'|'Zhejiang University' -
Cari dokumen yang bidang indeks
title-nya berisi Peking University tetapi tidak berisi Tsinghua. Jikatitlejuga 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) -
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" -
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' -
Cari bidang bertipe
LITERAL_ARRAY:LITERAL_ARRAYadalah array konstanta string di mana setiap elemen tidak ditokenisasi dan hanya mendukung pencocokan eksak. Asumsikan Anda memiliki bidangLITERAL_ARRAYyang diindeks sebagaitags_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'