يقوم ملحق 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 على واجهة برمجة تطبيقات ملحقة خاصة يمكنك الاتصال بها في بداية البرنامج. إذا كنت تستخدم 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.