Это расширение 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
, являются свободными параметрами, специфичными для алгоритма Окапи BM25. Значения по умолчанию: k1 = 1.2
и b = 0.75
. Вы можете настроить их для расширенной оптимизации, но значения по умолчанию, вероятно, будут работать нормально.
Okapi BM25 для SQLite3 выпускается под лицензией MIT.