Как запросить таблицу внешнего контента FTS4, но вернуть дополнительные столбцы из исходной таблицы контента
Я создаю таблицу внешнего содержимого FTS4 в SQLite следующим образом:
CREATE TABLE t2(id INTEGER PRIMARY KEY, col_a, col_b, col_text);
CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_text);
Я использую таблицу внешнего содержимого, поэтому мне не нужно хранить повторяющиеся значения col_text
в fts_table
, Я только индексирую col_text
так как col_a
а также col_b
не нужно индексировать
Тем не менее, когда я делаю запрос fts_table
как это
SELECT * FROM fts_table WHERE fts_table MATCH 'something';
У меня нет доступа к col_a
а также col_b
из таблицы содержимого t2
, Как вернуть все эти столбцы (col_a
, col_b
, col_text
) из одного запроса FTS?
Обновить
Я пытался использовать notindexed=column_name
вариант как в
CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_a, col_b, col_text, notindexed=col_a, notindexed=col_b);
Это должно работать для некоторых людей, но я использую его в Android и notindexed
опция не поддерживается до SQLite 3.8, которую Android не поддерживает до версии Android 5.x. И мне нужно поддерживать Android 4.x. Я обновляю этот вопрос, чтобы включить тег Android.
1 ответ
Таблицы FTS имеют внутренний столбец INTEGER PRIMARY KEY, который называется docid
или же rowid
, При вставке строки в таблицу FTS установите для этого столбца первичный ключ строки в исходной таблице.
Затем вы можете легко найти соответствующую строку, либо с помощью отдельного запроса, либо с помощью соединения следующим образом:
SELECT *
FROM t2
WHERE id IN (SELECT docid
FROM fts_table
WHERE col_text MATCH 'something')