Ekstensi SQLite ini membuat fungsi SQL yang disebut okapi_bm25
yang mengembalikan peringkat Okapi BM25 untuk hasil pencarian teks lengkap. Okapi BM25 adalah fungsi peringkat modern yang menghitung skor untuk setiap hasil berdasarkan relevansinya dengan permintaan pencarian. Ekstensi ini hanya berfungsi dengan kueri MATCH
pada tabel FTS4.
Ekstensi harus dikompilasi terlebih dahulu dari sumbernya:
$ make
gcc -Wall -Werror -bundle -fPIC -Isqlite3 -o okapi_bm25.sqlext okapi_bm25.c
File okapi_bm25.sqlext
yang telah dikompilasi kemudian dapat dimuat sebagai ekstensi SQLite. Cara Anda melakukannya bergantung pada bahasa yang Anda gunakan. Misalnya, pengikatan node-sqlite3 memiliki API ekstensi khusus yang dapat Anda panggil di awal program Anda. Jika Anda menggunakan SQLite dari konsol, gunakan perintah .load
untuk memuat ekstensi untuk sesi saat ini:
sqlite> .load ./okapi_bm25.sqlext
Fungsi pemeringkatan menggunakan fungsi matchinfo bawaan untuk memperoleh data yang diperlukan untuk menghitung skor. Permintaan pencarian sederhana mungkin terlihat seperti ini:
SELECT title FROM documents
WHERE title MATCH <query>
ORDER BY okapi_bm25(matchinfo(documents, 'pcnalx'), 0) DESC
Fungsi matchinfo
harus dipanggil dengan 'pcnalx'
sebagai argumen kedua. Argumen ini mendefinisikan struktur data yang diberikan ke fungsi okapi_bm25
, yang menerima data hanya dalam satu bentuk. Jika fungsi matchinfo
dipanggil dengan argumen kedua yang berbeda, ekstensi mungkin memberikan hasil yang salah atau gagal berfungsi sepenuhnya.
Fungsi okapi_bm25
hanya menghitung skor untuk satu kolom dalam satu waktu. Argumen searchColumn
, yang diberikan sebagai 0
pada contoh di atas, menentukan kolom yang akan digunakan. Nomor tersebut adalah indeks kolom dalam tabel FTS. Berikut skema untuk contoh di atas:
CREATE VIRTUAL TABLE documents USING fts4(title, content);
Dalam skema ini, kolom title
berada pada indeks 0
karena merupakan kolom pertama yang terdaftar. Jika urutannya dibalik, indeks title
yang benar adalah 1
.
Dua argumen opsional terakhir, k1
dan b
, merupakan parameter bebas khusus untuk algoritma Okapi BM25. Nilai defaultnya adalah k1 = 1.2
dan b = 0.75
. Anda dapat mengubahnya untuk pengoptimalan tingkat lanjut, tetapi pengaturan defaultnya mungkin akan berfungsi dengan baik.
Okapi BM25 untuk SQLite3 dirilis di bawah Lisensi MIT.