OpenSearch menyediakan performa pencarian tinggi dengan membagi seluruh proses pengurutan menjadi dua fase: pengurutan kasar dan pengurutan halus. Pengurutan kasar adalah proses pemilihan N dokumen berkualitas tinggi teratas dari semua dokumen yang diambil. Kemudian, N dokumen tersebut dinilai dan diurutkan dalam proses pengurutan halus. Dengan cara ini, pengguna dapat memperoleh dokumen yang paling sesuai dengan kebutuhan mereka. Pengurutan kasar memengaruhi performa pencarian, sedangkan pengurutan halus memengaruhi hasil akhir. Oleh karena itu, Anda dapat menggunakan faktor utama dari pengurutan halus untuk mengurutkan dokumen secara kasar dengan cara yang efisien dan sederhana. Dokumen diurutkan secara kasar dan halus menggunakan ekspresi pengurutan.
Anda dapat menyesuaikan ekspresi pengurutan untuk aplikasi dan menentukan ekspresi pengurutan dalam kueri pencarian untuk mengurutkan hasil. Ekspresi pengurutan juga disebut sebagai rumus peringkat. Ekspresi pengurutan mendukung operasi dasar, fungsi matematika, dan fungsi pengurutan halus. Operasi dasar mencakup operasi aritmatika, relasional, logika, bitwise, dan kondisional. OpenSearch memungkinkan Anda untuk mengurutkan hasil pencarian berdasarkan relevansi dalam aplikasi tipikal seperti forum dan aplikasi berita. Anda dapat memilih template ekspresi yang sesuai berdasarkan fitur data Anda dan memodifikasi template yang dipilih untuk menghasilkan ekspresi kustom.
Sebelum melakukan pengurutan halus berdasarkan relevansi, pastikan Anda memahami cara kerja kebijakan pengurutan: Setelah dokumen yang memenuhi persyaratan ditemukan berdasarkan kueri Anda, dokumen-dokumen tersebut diurutkan. Untuk informasi lebih lanjut, lihat Klausa Pengurutan. Jika Anda tidak menentukan klausa pengurutan atau telah menentukan fungsi peringkat dalam klausa pengurutan, skor dihitung berdasarkan relevansi.
Anda dapat merancang ekspresi untuk pengurutan kasar dan pengurutan halus berdasarkan kebutuhan pencarian aktual Anda. Untuk informasi lebih lanjut tentang cara merancang dan mengatur faktor pengurutan dalam skenario tipikal, lihat mengurutkan hasil pencarian berdasarkan relevansi. Topik ini menjelaskan cara mengonfigurasi kebijakan pengurutan.
Untuk melakukan operasi dasar seperti aritmatika, relasional, logika, dan kondisional, Anda harus menggunakan angka atau nilai bidang tipe NUMERIC dalam ekspresi pengurutan. Sebagian besar operasi berbasis fungsi tidak dapat dilakukan pada nilai tipe STRING.
Operasi dasar
Operasi | Operator | Deskripsi |
Operasi uner | - | Tanda minus (-) digunakan untuk mendapatkan negatif dari nilai yang diperoleh dengan menggunakan ekspresi tertentu. Contoh: -1 dan -max(width). |
Operasi aritmatika | +, -, *, / | Contoh: width/10 |
Operasi relasional | ==,!= ,>, <, >=, <= | Contoh: width >= 400 |
Operasi logika | and ,or,! | Contoh: width >= 400 and height >= 300, !(a > 1 and b < 2) |
Operasi bitwise | &, |,^ | Contoh: 3 & (price ^ pubtime) + (price | pubtime) |
Operasi kondisional | if(cond, thenValue, elseValue) | thenValue dikembalikan jika nilai parameter cond bukan nol, dan elseValue dikembalikan jika nilai parameter cond adalah nol. Contoh: if(2, 3, 5) mengembalikan 3, dan if(0, 3, 5) mengembalikan 5. Catatan: Nilai parameter cond tidak boleh berupa string, seperti nilai tipe LITERAL atau TEXT. Rentang nilai harus sama dengan rentang nilai tipe INT32. |
Operasi IN | i in [value1, value2, …, valuen] | Ekspresi mengembalikan 1 jika i termasuk dalam himpunan [value1, value2, …, valuen]. Jika tidak, 0 dikembalikan. Contoh: 2 in [2, 4, 6] mengembalikan 1, dan 3 in [2, 4, 6] mengembalikan 0. |
Fungsi numerik
Fungsi | Deskripsi |
max(a, b) | Mengembalikan nilai yang lebih besar antara a dan b. |
min(a, b) | Mengembalikan nilai yang lebih kecil antara a dan b. |
ln(a) | Mengembalikan logaritma natural dari a. |
log2(a) | Mengembalikan logaritma dari a dengan bilangan dasar 2. |
log10(a) | Mengembalikan logaritma dari a dengan bilangan dasar 10. |
sin(a) | Mengembalikan sinus dari a. |
cos(a) | Mengembalikan kosinus dari a. |
tan(a) | Mengembalikan tangen dari a. |
asin(a) | Mengembalikan arcsinus dari a. |
acos(a) | Mengembalikan arccosinus dari a. |
atan(a) | Mengembalikan arctangen dari a. |
ceil(a) | Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan a. Contoh: ceil(4.2) mengembalikan 5. |
floor(a) | Mengembalikan bilangan bulat terbesar yang lebih kecil dari atau sama dengan a. Contoh: floor(4.6) mengembalikan 4. |
sqrt(a) | Mengembalikan akar kuadrat dari a. Contoh: sqrt(4) mengembalikan 2. |
pow(a,b) | Mengembalikan hasil dari a pangkat b. Contoh: pow(2, 3) mengembalikan 8. |
now() | Mengembalikan jumlah detik yang telah berlalu sejak 00:00:00 tanggal 1 Januari 1970 dalam UTC. |
random() | Mengembalikan nilai acak dari 0 hingga 1. |
Fungsi fitur bawaan
OpenSearch menyediakan berbagai fungsi pengurutan kasar, seperti fungsi fitur layanan berbasis lokasi (LBS), teks, dan jenis ketepatan waktu. Anda dapat menggabungkan fungsi fitur dalam ekspresi pengurutan untuk melakukan pengurutan kompleks berdasarkan relevansi.
Plug-in berbasis Cava
Cava adalah bahasa pemrograman yang dikembangkan oleh tim mesin OpenSearch berdasarkan proyek low-level virtual machine (LLVM). Cava menggunakan sintaksis mirip Java dan dapat mencapai performa seefisien C++. Cava adalah bahasa pemrograman berorientasi objek. Ini mendukung kompilasi just-in-time (JIT) dan berbagai pemeriksaan keamanan untuk memastikan program yang lebih kuat. Anda dapat menggunakan Cava dan pustaka Cava yang disediakan oleh OpenSearch untuk merancang plug-in pengurutan khusus di OpenSearch. Plug-in pengurutan berbasis Cava memiliki manfaat berikut dibandingkan dengan ekspresi yang didukung oleh OpenSearch:
Desain kustom yang lebih beragam: Cava memungkinkan Anda menyesuaikan plug-in pengurutan menggunakan sintaksis yang lebih beragam. Misalnya, Anda dapat menggunakan loop for dan mendefinisikan fungsi serta kelas berdasarkan kebutuhan bisnis Anda.
Lebih mudah dirawat: Plug-in pengurutan berbasis Cava lebih mudah dibaca daripada ekspresi dan lebih mudah dirawat.
Lebih mudah dipelajari: Cava menggunakan sintaksis mirip Java. Jika Anda terbiasa dengan Java, Anda dapat memahami dan menggunakan Cava untuk pengembangan dengan mudah. Ini mengurangi biaya pembelajaran.
Catatan: Plug-in berbasis Cava hanya dapat digunakan dalam aplikasi eksklusif.
Prosedur
Contoh berikut menunjukkan cara mengonfigurasi kebijakan pengurutan kasar dan pengurutan halus menggunakan fungsi pengurutan berbasis relevansi teks:
1. Buat Kebijakan Pengurutan Kasar: Masuk ke konsol OpenSearch. Di pojok kiri atas halaman, pilih OpenSearch High-performance Search Edition. Di panel navigasi di sebelah kiri, pilih Pusat Konfigurasi Pencarian > Konfigurasi Pengurutan. Klik Manajemen Kebijakan, lalu klik Buat. Di halaman yang muncul, tentukan Nama Kebijakan dan atur Ruang Lingkup ke Pengurutan Kasar dan Jenis ke Ekspresi. Lalu klik Berikutnya.

Pilih static_bm25 sebagai Karakteristik Penilaian, dan atur Bobot ke 10. Jika bobot diatur ke 10, skor dikalikan dengan 10 dalam perhitungan.
Opsional. Tentukan bidang pencarian, dan atur bobot. Bidang yang ditentukan harus berupa bidang atribut, dan hanya nilai numerik yang didukung, seperti nilai tipe INT, DOUBLE, dan FLOAT. Skor dari nilai bidang dikalikan dengan bobot juga ditambahkan ke skor.

Setelah konfigurasi selesai, klik Kembali untuk kembali ke halaman Manajemen Kebijakan.
2. Buat Kebijakan Pengurutan Halus: Masuk ke konsol OpenSearch. Di pojok kiri atas halaman, pilih OpenSearch High-performance Search Edition. Di panel navigasi di sebelah kiri, pilih Pusat Konfigurasi Pencarian > Konfigurasi Pengurutan. Klik Manajemen Kebijakan, lalu klik Buat. Di halaman yang muncul, tentukan Nama Kebijakan dan atur Ruang Lingkup ke Pengurutan Halus dan Jenis ke Ekspresi. Lalu klik Berikutnya.
Pilih text_relevance dari daftar drop-down Fungsi Bawaan, masukkan nama bidang yang akan diquery dalam tanda kurung, lalu klik Selesai.
Setelah konfigurasi selesai, klik Kembali untuk kembali ke halaman Manajemen Kebijakan.
3. Lihat Hasil Pengurutan: Di halaman Uji Pencarian, atur bidang untuk pengurutan kasar dan pengurutan halus dan aktifkan Tampilkan Detail Pengurutan.
Gambar berikut menunjukkan skor yang dihitung untuk setiap fungsi.

Dokumen diurutkan secara kasar kemudian diurutkan secara halus berdasarkan skor. Dokumen yang diambil melalui query dan difilter oleh filter masuk ke tahap pengurutan kasar. Artinya, N dokumen berkualitas tinggi teratas dipilih dari dokumen-dokumen tersebut berdasarkan skor yang dihitung menggunakan ekspresi pengurutan kasar. Kemudian, ekspresi pengurutan halus digunakan untuk mengembalikan dokumen yang paling sesuai dengan kebutuhan pengguna. Skor dihitung sebagai berikut:
Jika hanya pengurutan kasar yang dikonfigurasi, skor dokumen sama dengan 10.000 ditambah hasil yang dihitung menggunakan ekspresi pengurutan kasar. Skor maksimum dokumen adalah 20.000. Artinya, jika skor dokumen aktual melebihi 20.000, skor yang ditampilkan tetap 20.000.
Jika hanya pengurutan halus yang dikonfigurasi, skor dokumen sama dengan 10.000 ditambah hasil yang dihitung menggunakan ekspresi pengurutan halus. Tidak ada batas atas untuk skor dokumen.
Jika baik pengurutan kasar maupun pengurutan halus dikonfigurasi, skor akhir dokumen yang masuk ke tahap pengurutan halus sama dengan 10.000 ditambah hasil yang dihitung menggunakan ekspresi pengurutan halus, dan skor akhir dokumen lain yang hanya diurutkan secara kasar sama dengan 10.000 ditambah hasil yang dihitung menggunakan ekspresi pengurutan kasar. Skor akhir maksimum adalah 20.000. Artinya, jika skor dokumen aktual melebihi 20.000, skor akhir tetap 20.000.
Anda dapat membuat beberapa aturan pengurutan kasar dan pengurutan halus. Namun, Anda hanya dapat menggunakan satu aturan pengurutan kasar dan satu aturan pengurutan halus pada saat yang sama dalam sebuah query.
Anda hanya dapat menentukan satu nama ekspresi pengurutan dalam first_rank_name. Beberapa ekspresi pengurutan kasar tidak dapat digunakan pada saat yang sama.
Anda hanya dapat menentukan satu nama ekspresi pengurutan dalam second_rank_name. Beberapa ekspresi pengurutan halus tidak dapat digunakan pada saat yang sama.
Konfigurasi SDK
SDK untuk Java:
// Tentukan ekspresi pengurutan kasar dan ekspresi pengurutan halus. Dalam contoh ini, ekspresi default digunakan.
Rank rank =newRank();
rank.setFirstRankName("default");// Nama kebijakan pengurutan kasar
rank.setSecondRankName("default");// Nama kebijakan pengurutan halus
rank.setReRankSize(5);// Tentukan jumlah dokumen yang akan diurutkan berdasarkan ekspresi pengurutan halus.SDK untuk PHP:
// Tentukan ekspresi pengurutan kasar.
$params->setFirstRankName('default');
// Tentukan ekspresi pengurutan halus.
$params->setSecondRankName('default');Catatan Penggunaan
Ekspresi pengurutan kasar dan pengurutan halus yang ditentukan dalam kode memiliki prioritas lebih tinggi daripada ekspresi pengurutan kasar dan pengurutan halus default yang dikonfigurasi di konsol OpenSearch.
Contoh berikut menunjukkan cara memeriksa informasi pengurutan dalam kode:
Tambahkan pasangan kunci-nilai format:fulljson; ke klausa config.
Dalam hasil yang dikembalikan, sortExprValues menunjukkan skor dokumen.

Nilai sortExprValues adalah array yang mencakup nilai bidang pengurutan dalam klausa pengurutan. Contoh:
sort=-price;-RANKDalam hal ini, sortExprValues adalah [price, skor dokumen], dan konsol OpenSearch menggunakan skor dokumen untuk mengurutkan dokumen.
Jika klausa pengurutan tidak ditentukan, konsol OpenSearch menggunakan hasil pengurutan default.