Esta extensão SQLite cria uma função SQL chamada okapi_bm25
que retorna a classificação Okapi BM25 para resultados de uma pesquisa de texto completo. Okapi BM25 é uma função de classificação moderna que calcula uma pontuação para cada resultado com base em sua relevância para a consulta de pesquisa. Esta extensão só funciona com consultas MATCH
em tabelas FTS4.
A extensão deve primeiro ser compilada a partir da fonte:
$ make
gcc -Wall -Werror -bundle -fPIC -Isqlite3 -o okapi_bm25.sqlext okapi_bm25.c
O arquivo okapi_bm25.sqlext
compilado pode então ser carregado como uma extensão SQLite. A maneira como você faz isso depende do idioma que você está usando. Por exemplo, as ligações node-sqlite3 têm uma API de extensão especial que você pode chamar no início do seu programa. Se estiver usando SQLite no console, use o comando .load
para carregar a extensão da sessão atual:
sqlite> .load ./okapi_bm25.sqlext
A função de classificação usa a função matchinfo integrada para obter os dados necessários para calcular as pontuações. Uma consulta de pesquisa simples pode ser assim:
SELECT title FROM documents
WHERE title MATCH <query>
ORDER BY okapi_bm25(matchinfo(documents, 'pcnalx'), 0) DESC
A função matchinfo
deve ser chamada com 'pcnalx'
como segundo argumento. Este argumento define a estrutura dos dados fornecidos à função okapi_bm25
, que aceita os dados em apenas uma forma. Se a função matchinfo
for chamada com um segundo argumento diferente, a extensão poderá fornecer resultados incorretos ou não funcionar totalmente.
A função okapi_bm25
calcula apenas a pontuação de uma coluna por vez. O argumento searchColumn
, fornecido como 0
no exemplo acima, especifica a coluna que será usada. O número é o índice da coluna da tabela FTS. Aqui está um esquema para o exemplo acima:
CREATE VIRTUAL TABLE documents USING fts4(title, content);
Neste esquema, a coluna title
está no índice 0
porque é a primeira coluna listada. Se a ordem fosse invertida, o índice correto para title
seria 1
.
Os dois últimos argumentos opcionais, k1
e b
, são parâmetros livres específicos do algoritmo Okapi BM25. Os valores padrão são k1 = 1.2
e b = 0.75
. Você pode ajustá-los para otimização avançada, mas os padrões provavelmente funcionarão bem.
Okapi BM25 para SQLite3 é lançado sob a licença MIT.