После того, как я реализовал функцию полнотекстового поиска в своем приложении с использованием таблиц Sqlite и FTS, меня заинтересовал бы эффективный способ извлечения ПОЛНОГО инвертированного индекса из моей таблицы FTS. По сути - мне нужна таблица результатов, включающая сопоставление между всеми терминами -> 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');
... вместо просто терминов и количества вхождений для всех документов, как в таблице FUX 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
Я до сих пор не уверен, достаточно ли эффективен простой запрос на совпадение по всем терминам в коллекции документов - может быть, есть более прямой путь?