ส่วนขยาย SQLite นี้สร้างฟังก์ชัน SQL ที่เรียกว่า okapi_bm25
ซึ่งส่งคืนการจัดอันดับ Okapi BM25 สำหรับผลลัพธ์ของการค้นหาข้อความแบบเต็ม Okapi BM25 เป็นฟังก์ชันการจัดอันดับสมัยใหม่ที่คำนวณคะแนนสำหรับผลลัพธ์แต่ละรายการตามความเกี่ยวข้องกับคำค้นหา ส่วนขยายนี้ใช้ได้กับคำสั่ง MATCH
บนตาราง FTS4 เท่านั้น
ส่วนขยายจะต้องรวบรวมจากแหล่งที่มาก่อน:
$ make
gcc -Wall -Werror -bundle -fPIC -Isqlite3 -o okapi_bm25.sqlext okapi_bm25.c
ไฟล์ okapi_bm25.sqlext
ที่คอมไพล์แล้วสามารถโหลดเป็นส่วนขยาย SQLite ได้ วิธีที่คุณทำเช่นนี้ขึ้นอยู่กับภาษาที่คุณใช้ ตัวอย่างเช่น การผูก node-sqlite3 มี API ส่วนขยายพิเศษที่คุณสามารถเรียกใช้ได้เมื่อเริ่มโปรแกรม หากคุณใช้ SQLite จากคอนโซล คุณจะใช้คำสั่ง .load
เพื่อโหลดส่วนขยายสำหรับเซสชันปัจจุบัน:
sqlite> .load ./okapi_bm25.sqlext
ฟังก์ชั่นการจัดอันดับใช้ฟังก์ชั่น matchinfo ในตัวเพื่อรับข้อมูลที่จำเป็นในการคำนวณคะแนน คำค้นหาง่ายๆ อาจมีลักษณะดังนี้:
SELECT title FROM documents
WHERE title MATCH <query>
ORDER BY okapi_bm25(matchinfo(documents, 'pcnalx'), 0) DESC
ฟังก์ชัน matchinfo
ต้อง ถูกเรียกด้วย 'pcnalx'
เป็นอาร์กิวเมนต์ที่สอง อาร์กิวเมนต์นี้กำหนดโครงสร้างของข้อมูลที่กำหนดให้กับฟังก์ชัน okapi_bm25
ซึ่งยอมรับข้อมูลในรูปแบบเดียวเท่านั้น ถ้าฟังก์ชัน matchinfo
ถูกเรียกด้วยอาร์กิวเมนต์ที่สองอื่น ส่วนขยายอาจให้ผลลัพธ์ที่ไม่ถูกต้องหรือไม่สามารถทำงานได้เลย
ฟังก์ชัน okapi_bm25
จะคำนวณคะแนนครั้งละหนึ่งคอลัมน์เท่านั้น อาร์กิวเมนต์ searchColumn
ที่ระบุเป็น 0
ในตัวอย่างด้านบน ระบุคอลัมน์ที่จะใช้ ตัวเลขคือดัชนีของคอลัมน์ภายในตาราง FTS นี่คือสคีมาสำหรับตัวอย่างด้านบน:
CREATE VIRTUAL TABLE documents USING fts4(title, content);
ในสคีมานี้ คอลัมน์ title
อยู่ที่ดัชนี 0
เนื่องจากเป็นคอลัมน์แรกที่แสดง หากกลับลำดับ ดัชนีที่ถูกต้องสำหรับ title
จะเป็น 1
อาร์กิวเมนต์ทางเลือกสองตัวสุดท้าย k1
และ b
เป็นพารามิเตอร์อิสระเฉพาะสำหรับอัลกอริทึม Okapi BM25 ค่าเริ่มต้นคือ k1 = 1.2
และ b = 0.75
คุณสามารถปรับแต่งสิ่งเหล่านี้เพื่อการเพิ่มประสิทธิภาพขั้นสูงได้ แต่ค่าเริ่มต้นอาจจะทำงานได้ดี
Okapi BM25 สำหรับ SQLite3 เปิดตัวภายใต้ใบอนุญาต MIT