Diese SQLite-Erweiterung erstellt eine SQL-Funktion namens okapi_bm25
, die das Okapi BM25-Ranking für Ergebnisse einer Volltextsuche zurückgibt. Okapi BM25 ist eine moderne Ranking-Funktion, die für jedes Ergebnis basierend auf seiner Relevanz für die Suchanfrage einen Score berechnet. Diese Erweiterung funktioniert nur mit MATCH
Abfragen für FTS4-Tabellen.
Die Erweiterung muss zunächst aus der Quelle kompiliert werden:
$ make
gcc -Wall -Werror -bundle -fPIC -Isqlite3 -o okapi_bm25.sqlext okapi_bm25.c
Die kompilierte Datei okapi_bm25.sqlext
kann dann als SQLite-Erweiterung geladen werden. Die Art und Weise, wie Sie dies tun, hängt von der Sprache ab, die Sie verwenden. Beispielsweise verfügen die node-sqlite3-Bindungen über eine spezielle Erweiterungs-API, die Sie zu Beginn Ihres Programms aufrufen können. Wenn Sie SQLite über die Konsole verwenden, verwenden Sie den Befehl .load
um die Erweiterung für die aktuelle Sitzung zu laden:
sqlite> .load ./okapi_bm25.sqlext
Die Ranking-Funktion verwendet die integrierte Matchinfo-Funktion, um die für die Berechnung der Ergebnisse erforderlichen Daten zu erhalten. Eine einfache Suchanfrage könnte so aussehen:
SELECT title FROM documents
WHERE title MATCH <query>
ORDER BY okapi_bm25(matchinfo(documents, 'pcnalx'), 0) DESC
Die matchinfo
-Funktion muss mit 'pcnalx'
als zweitem Argument aufgerufen werden. Dieses Argument definiert die Struktur der Daten, die an die Funktion okapi_bm25
übergeben werden, die die Daten nur in einer Form akzeptiert. Wenn die matchinfo
-Funktion mit einem anderen zweiten Argument aufgerufen wird, liefert die Erweiterung möglicherweise falsche Ergebnisse oder funktioniert überhaupt nicht.
Die Funktion okapi_bm25
berechnet jeweils nur die Punktzahl für eine Spalte. Das Argument searchColumn
, im obigen Beispiel als 0
angegeben, gibt die zu verwendende Spalte an. Die Zahl ist der Index der Spalte innerhalb der FTS-Tabelle. Hier ist ein Schema für das obige Beispiel:
CREATE VIRTUAL TABLE documents USING fts4(title, content);
In diesem Schema hat die title
den Index 0
da es sich um die erste aufgeführte Spalte handelt. Wenn die Reihenfolge umgekehrt wäre, wäre der korrekte Index für title
1
.
Die letzten beiden optionalen Argumente, k1
und b
, sind freie Parameter, die für den Okapi BM25-Algorithmus spezifisch sind. Die Standardwerte sind k1 = 1.2
und b = 0.75
. Sie können diese für eine erweiterte Optimierung anpassen, aber die Standardeinstellungen werden wahrscheinlich gut funktionieren.
Okapi BM25 für SQLite3 wird unter der MIT-Lizenz veröffentlicht.