sqlite okapi bm25
1.0.0
此 SQLite 擴充功能會建立一個名為okapi_bm25
的 SQL 函數,該函數傳回全文搜尋結果的 Okapi BM25 排名。 Okapi BM25 是一種現代排名函數,它根據每個結果與搜尋查詢的相關性來計算每個結果的分數。此擴充僅適用於 FTS4 表上的MATCH
查詢。
擴充必須先從原始碼編譯:
$ 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
是特定於 Okapi BM25 演算法的自由參數。預設值為k1 = 1.2
和b = 0.75
。您可以調整這些以進行高級最佳化,但預設值可能會正常工作。
適用於 SQLite3 的 Okapi BM25 是根據 MIT 許可證發布的。