7

Sqlite と FTS テーブルを使用してアプリケーションに全文検索機能を実装した後、FTS テーブルから FULL 転置インデックスを取得するパフォーマンスの高い方法に興味があります。実際には、すべての用語間のマッピングを含む結果テーブルが必要です-> docid's->出現数。

Sqlite FTSドキュメントに従う- テーブルの作成後

-- Create an FTS4 table
CREATE VIRTUAL TABLE ft USING fts4(x, y);

-- Create an fts4aux table to access the full-text index for table "ft"
CREATE VIRTUAL TABLE ft_terms USING fts4aux(ft);

...そしてコンテンツの挿入...

INSERT INTO ft(x, y) VALUES('Apple banana', 'Cherry');
INSERT INTO ft(x, y) VALUES('Banana Date Date', 'cherry');
INSERT INTO ft(x, y) VALUES('Cherry Elderberry', 'Elderberry');

... FTS AUX テーブルのように、すべてのドキュメントの用語と出現回数だけではなく...

SELECT term, col, documents, occurrences FROM ft_terms;

--     apple       |  *  |  1  |  1
--     apple       |  0  |  1  |  1
--     banana      |  *  |  2  |  2
--     banana      |  0  |  2  |  2
--     cherry      |  *  |  3  |  3
--     cherry      |  0  |  1  |  1
--     cherry      |  1  |  2  |  2
--     date        |  *  |  1  |  2
--     date        |  0  |  1  |  2
--     elderberry  |  *  |  1  |  2
--     elderberry  |  1  |  1  |  1
--     elderberry  |  1  |  1  |  1

結果は次の表のようになります。

           Term    |col  |docid| occurences
------------------------------------------
--     apple       |  0  |  1  |  1
--     banana      |  0  |  2  |  1
--     cherry      |  0  |  3  |  1
--     cherry      |  1  |  1  |  1
--     cherry      |  1  |  2  |  1
--     date        |  0  |  2  |  2
--     elderberry  |  0  |  3  |  1
--     elderberry  |  1  |  3  |  1

ドキュメント コレクション内のすべての用語に対する単純な一致クエリが十分に効果的かどうかはまだわかりません。もっと直接的な方法があるのではないでしょうか?

4

0 に答える 0