All Products
Search
Document Center

OpenSearch:Kebijakan Pengurutan

Last Updated:Jun 21, 2026

Mesin pencari memerlukan kinerja pengambilan (retrieval) yang tinggi. Untuk memenuhi kebutuhan ini, OpenSearch menyediakan proses pengurutan dua tahap: rough sort dan fine sort. Tahap rough sort berfungsi sebagai filter awal yang dengan cepat mengidentifikasi dokumen berkualitas tinggi dari hasil pencarian awal. Dokumen N teratas dari tahap ini kemudian diteruskan ke tahap fine sort, tempat mereka diberi skor ulang secara detail. Akibatnya, rough sort berdampak signifikan terhadap kinerja, sedangkan fine sort terutama memengaruhi kualitas peringkat. Oleh karena itu, ekspresi rough sort harus sederhana dan efektif, hanya menggunakan faktor paling kritis dari tahap fine sort. Anda mengonfigurasi kedua tahap tersebut menggunakan sort expression.

Sort expression (formula peringkat) memungkinkan Anda menyesuaikan cara hasil pencarian diberi peringkat. Anda dapat mengurutkan hasil dengan menentukan ekspresi tersebut dalam sebuah kueri. Sort expression mendukung operasi dasar (aritmetika, relasional, logika, bitwise, dan kondisional), fungsi matematika, serta ranking features. Untuk aplikasi umum seperti forum dan situs berita, OpenSearch menyediakan expression templates. Anda dapat memilih templat yang sesuai dan memodifikasinya untuk membuat ekspresi sendiri.

Sebelum mengonfigurasi relevansi peringkat (fine sort), pahami sorting policy default. Setelah kueri dan klausa lainnya mengambil dokumen, dokumen-dokumen tersebut memasuki tahap pengurutan. Untuk informasi lebih lanjut, lihat sort clause. Jika Anda tidak menentukan sort clause atau jika sort clause secara eksplisit menentukan RANK, fase penilaian relevansi akan dipicu.

Desain ekspresi rough sort dan fine sort bergantung pada kebutuhan pencarian Anda. Untuk detail tentang cara merancang faktor peringkat dalam beberapa skenario khas, lihat artikel Relevance in Practice di bagian Best Practices.

Catatan

Sort expression memerlukan nilai numerik atau bidang numerik untuk semua operasi dasar, seperti operasi aritmetika, relasional, logika, dan kondisional. Sebagian besar fungsi tidak mendukung bidang bertipe string.

Operasi Dasar

Operasi

Operator

Deskripsi

Unary

-

Operator negasi. Membalikkan nilai suatu ekspresi. Contoh: -1 atau -max(width).

Aritmetika

+, -, *, /

Contoh: width / 10.

Relasional

==, !=, >, <, >=, <=

Contoh: width>=400.

Logis

and, or, !

Contoh: width>=400 and height >= 300, atau !(a > 1 and b < 2).

Bitwise

&, |, ^

Contoh: 3 & (price ^ pubtime) + (price | pubtime).

Kondisional

if(cond, thenValue, elseValue)

Jika cond bernilai bukan nol, ekspresi mengembalikan thenValue. Jika tidak, ekspresi mengembalikan elseValue. Misalnya, if(2, 3, 5) mengembalikan 3, dan if(0, 3, 5) mengembalikan 5. Catatan: Operasi ini tidak mendukung bidang string, seperti bidang bertipe LITERAL atau TEXT. Nilai kembali harus berada dalam rentang int32.

in

i in (value1, value2, …, valuen)

Jika i berada dalam himpunan (value1, value2, …, valuen), ekspresi mengembalikan 1. Jika tidak, ekspresi mengembalikan 0. Misalnya, 2 in (2, 4, 6) mengembalikan 1, dan 3 in (2, 4, 6) mengembalikan 0.

Fungsi Matematika

Fungsi

Deskripsi

max(a, b)

Mengembalikan nilai terbesar antara a dan b.

min(a, b)

Mengembalikan nilai terkecil antara a dan b.

ln(a)

Mengembalikan logaritma natural dari a.

log2(a)

Mengembalikan logaritma basis-2 dari a.

log10(a)

Mengembalikan logaritma basis-10 dari a.

sin(a)

Fungsi sinus.

cos(a)

Fungsi cosinus.

tan(a)

Fungsi tangen.

asin(a)

Fungsi arcsinus.

acos(a)

Fungsi arccosinus.

atan(a)

Fungsi arctangen.

ceil(a)

Membulatkan a ke atas ke bilangan bulat terdekat. Misalnya, ceil(4.2) mengembalikan 5.

floor(a)

Membulatkan a ke bawah ke bilangan bulat terdekat. Misalnya, floor(4.6) mengembalikan 4.

sqrt(a)

Mengembalikan akar kuadrat dari a. Misalnya, sqrt(4) mengembalikan 2.

pow(a,b)

Mengembalikan a pangkat b. Misalnya, pow(2, 3) mengembalikan 8.

now()

Mengembalikan waktu saat ini dalam detik sejak Epoch (00:00:00 UTC, 1 Januari 1970).

random()

Mengembalikan nilai acak dalam rentang [0, 1].

Fungsi Bawaan

OpenSearch menyediakan beragam fungsi bawaan, seperti fungsi untuk Location Based Services (LBS), teks, dan ketepatan waktu. Anda dapat menggabungkan fungsi-fungsi ini dalam sort expression untuk menciptakan peringkat relevansi yang andal.

Plugin Cava

Cava adalah bahasa pemrograman berkinerja tinggi yang dikembangkan oleh tim mesin OpenSearch berdasarkan LLVM. Sintaksnya mirip Java, dan kinerjanya setara dengan C++. Cava merupakan bahasa pemrograman berorientasi objek yang mendukung kompilasi just-in-time (JIT) dan mencakup berbagai pemeriksaan keamanan untuk memastikan ketangguhan program. Anda dapat menggunakan Cava beserta pustakanya untuk membuat plugin pengurutan kustom di OpenSearch. Dibandingkan dengan sort expression standar, plugin Cava menawarkan keunggulan berikut:

  • Kustomisasi lebih luas: Cava menyediakan fitur sintaks yang lebih lengkap dibandingkan ekspresi, seperti loop for serta definisi fungsi dan kelas, sehingga memungkinkan Anda menerapkan logika bisnis kustom.

  • Pemeliharaan lebih mudah: Plugin pengurutan yang ditulis dalam Cava lebih mudah dibaca dan dirawat dibandingkan ekspresi kompleks.

  • Kurva pembelajaran lebih rendah: Sintaks Cava mirip Java, sehingga mudah dipelajari oleh pengembang Java.

Catatan: Plugin Cava hanya didukung untuk aplikasi eksklusif.

Prosedur

Contoh ini menunjukkan cara mengonfigurasi rough sort dan fine sort dengan menggunakan text relevance sorting function.

1. Buat kebijakan rough sort. Di Konsol OpenSearch, buka **Sort Configuration** > **Policy Management**, lalu klik **Create**. Masukkan **Policy Name**, atur **Scope** menjadi **Rough Sort**, atur **Type** menjadi **Expression**, lalu klik **Next**.

Pilih static_bm25 sebagai Scoring Characteristics dan atur bobotnya menjadi 10. Bobot 10 berarti skor dikalikan 10 selama perhitungan. Anda juga dapat memilih bidang pencarian dan mengatur bobotnya. Bidang tersebut harus merupakan bidang atribut dan bertipe numerik, seperti INT, DOUBLE, atau FLOAT. Skor nilai bidang * bobot ditambahkan ke skor pengurutan total.

Sebagai contoh, pilih bidang sale_price dari Search Field dan atur bobotnya menjadi 0.08.

Setelah konfigurasi selesai, Anda akan dialihkan ke halaman manajemen kebijakan.

2. Buat kebijakan fine sort. Di Konsol OpenSearch, buka **Sort Configuration** > **Policy Management**, lalu klik **Create**. Masukkan **Policy Name**, atur **Scope** menjadi **Fine Sort**, atur **Type** menjadi **Expression**, lalu klik **Next**.

Pada langkah Sort Configuration, pilih bidang dari daftar drop-down Field, masukkan ekspresi pengurutan text_relevance(brand) di editor, lalu klik Completed. Setelah konfigurasi selesai, Anda akan dialihkan ke halaman Sort Configuration.

3. Lihat efek pengurutan. Di halaman Search Test, atur parameter first_rank_name ke nama kebijakan rough sort Anda, misalnya test_1. Atur parameter second_rank_name ke nama kebijakan fine sort Anda, misalnya test_2. Aktifkan sakelar Show Sort Details untuk melihat detail skor setiap dokumen dan fungsi.

Catatan

Pemberian skor dokumen terjadi dalam dua tahap: rough sort dan fine sort. Setelah kueri mengambil dan memfilter dokumen, dokumen-dokumen tersebut memasuki tahap rough sort. Ekspresi rough sort memilih dokumen dengan skor lebih tinggi. Kemudian, hasil N teratas diteruskan ke tahap fine sort untuk diberi skor detail berdasarkan ekspresi fine sort. Akhirnya, hasil optimal dikembalikan. Logika pemberian skor adalah sebagai berikut:

  • Jika hanya kebijakan rough sort yang dikonfigurasi, skor dokumen adalah (10000 + hasil ekspresi rough sort). Skor total dibatasi maksimal 20.000.

  • Jika hanya kebijakan fine sort yang dikonfigurasi, skor dokumen adalah (10000 + hasil ekspresi fine sort). Skor total tidak memiliki batas atas.

  • Jika kebijakan rough sort dan fine sort keduanya dikonfigurasi, skor akhir untuk dokumen yang memasuki tahap fine sort adalah (10000 + hasil ekspresi fine sort). Skor akhir untuk dokumen lainnya adalah (10000 + hasil ekspresi rough sort), dan skor ini dibatasi maksimal 20.000.

  • Anda dapat membuat beberapa aturan rough sort dan fine sort, tetapi satu kueri hanya dapat menggunakan satu aturan rough sort dan satu aturan fine sort sekaligus.

Penting
  • Parameter first_rank_name hanya mendukung satu nama ekspresi pengurutan.

  • Parameter second_rank_name hanya mendukung satu nama ekspresi pengurutan.

Contoh Konfigurasi SDK

Contoh Java SDK:

// Atur ekspresi rough sort dan fine sort. Contoh ini menggunakan "default".
Rank rank =new Rank();
rank.setFirstRankName("default"); // Nama kebijakan rough sort.
rank.setSecondRankName("default"); // Nama kebijakan fine sort.
rank.setReRankSize(5); // Jumlah dokumen untuk fine sorting.

Contoh PHP SDK:

// Tentukan ekspresi rough sort.
$params->setFirstRankName('default');
// Tentukan ekspresi fine sort.
$params->setSecondRankName('default');

Catatan:

  • Jika Anda menentukan kebijakan pengurutan dalam kode, kebijakan tersebut akan menggantikan kebijakan default yang ditetapkan di Konsol.

  • Untuk melihat detail pengurutan dalam kode:

    Metode: Tambahkan parameter format:fulljson ke klausa config.

    Dalam respons, sortExprValues berisi skor dokumen.

    "sortExprValues": [
        "10000.0399786383"
    ],
    "property": {
    }

    sortExprValues adalah array yang berisi nilai bidang pengurutan dalam klausa sort. Contoh:

    sort=-price;-RANK

    Dalam kasus ini, sortExprValues adalah [price, document score].

    Jika sort tidak diatur, nilainya secara default adalah skor dokumen.