Я создаю таблицу внешнего контента 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.
Таблицы FTS имеют внутренний столбец INTEGER PRIMARY KEY, называемый docid
или docid
. При вставке строки в таблицу FTS установите этот столбец в первичный ключ строки в исходной таблице.
Затем вы можете легко найти соответствующую строку, либо с отдельным запросом, либо со следующим соединением:
SELECT * FROM t2 WHERE id IN (SELECT docid FROM fts_table WHERE col_text MATCH 'something')