이 SQLite 확장은 전체 텍스트 검색 결과에 대한 Okapi BM25 순위를 반환하는 okapi_bm25
라는 SQL 함수를 생성합니다. 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
함수는 한 번에 하나의 열에 대한 점수만 계산합니다. 위 예에서 0
으로 제공된 searchColumn
인수는 사용할 열을 지정합니다. 숫자는 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 라이선스에 따라 릴리스됩니다.