Cette extension SQLite crée une fonction SQL appelée okapi_bm25
qui renvoie le classement Okapi BM25 pour les résultats d'une recherche en texte intégral. Okapi BM25 est une fonction de classement moderne qui calcule un score pour chaque résultat en fonction de sa pertinence par rapport à la requête de recherche. Cette extension ne fonctionne qu'avec les requêtes MATCH
sur les tables FTS4.
L'extension doit d'abord être compilée à partir des sources :
$ make
gcc -Wall -Werror -bundle -fPIC -Isqlite3 -o okapi_bm25.sqlext okapi_bm25.c
Le fichier okapi_bm25.sqlext
compilé peut ensuite être chargé en tant qu'extension SQLite. La façon dont vous procédez dépend de la langue que vous utilisez. Par exemple, les liaisons node-sqlite3 ont une API d'extension spéciale que vous pouvez appeler au démarrage de votre programme. Si vous utilisez SQLite depuis la console, vous utilisez la commande .load
pour charger l'extension pour la session en cours :
sqlite> .load ./okapi_bm25.sqlext
La fonction de classement utilise la fonction matchinfo intégrée pour obtenir les données nécessaires au calcul des scores. Une simple requête de recherche pourrait ressembler à ceci :
SELECT title FROM documents
WHERE title MATCH <query>
ORDER BY okapi_bm25(matchinfo(documents, 'pcnalx'), 0) DESC
La fonction matchinfo
doit être appelée avec 'pcnalx'
comme deuxième argument. Cet argument définit la structure des données fournies à la fonction okapi_bm25
, qui n'accepte les données que sous une seule forme. Si la fonction matchinfo
est appelée avec un deuxième argument différent, l'extension peut fournir des résultats incorrects ou ne pas fonctionner entièrement.
La fonction okapi_bm25
calcule uniquement le score d'une colonne à la fois. L'argument searchColumn
, fourni à 0
dans l'exemple ci-dessus, spécifie la colonne qu'il utilisera. Le nombre est l'index de la colonne dans la table FTS. Voici un schéma pour l'exemple ci-dessus :
CREATE VIRTUAL TABLE documents USING fts4(title, content);
Dans ce schéma, la colonne title
est à l'index 0
car c'est la première colonne répertoriée. Si l'ordre était inversé, l'index correct pour title
serait 1
.
Les deux derniers arguments optionnels, k1
et b
, sont des paramètres libres spécifiques à l'algorithme Okapi BM25. Les valeurs par défaut sont k1 = 1.2
et b = 0.75
. Vous pouvez les modifier pour une optimisation avancée, mais les valeurs par défaut fonctionneront probablement correctement.
Okapi BM25 pour SQLite3 est publié sous licence MIT.