Как исключить столбец из поиска в таблице FTS3 - PullRequest
6 голосов
/ 12 октября 2010

У меня есть такая таблица:

CREATE VIRTUAL TABLE t USING FTS3(hidden, text1, text2)

Я бы хотел, чтобы пользователь мог выполнять поиск по столбцам 'text1' и 'text2', поэтому запрос

SELECT docid FROM t WHERE t MATCH ?

И возможные запросы:

SELECT docid FROM t WHERE t MATCH 'foo'
SELECT docid FROM t WHERE t MATCH 'text1:foo OR text2:bar'

В: как я могу исключить «скрытый» столбец из поиска, чтобы пользователь не мог найти строки по скрытому значению?

Я собираюсь использовать «скрытый» столбец для ссылки на строки в дополнительной таблице с дополнительной информацией.

Ответы [ 2 ]

11 голосов
/ 30 августа 2013

Старый поток, но если вы используете более новую сборку SQLite (> 3.8), теперь вы можете использовать опцию notindexed, например:

CREATE VIRTUAL TABLE t USING FTS4(uuid, document, notindexed=uuid);

Это исключит столбец из соответствиязапросы.

Я также получил эту работу на iOS, встроив мою собственную сборку SQLite 3.8.

Документация для неиндексированного параметра

6 голосов
/ 06 ноября 2010

Таблица FTS3 получает свободный 64-битный целочисленный столбец с именем docid, который не индексируется.Просто поместите дополнительные данные в отдельную таблицу, где первичный ключ для этой таблицы совпадает с docid для таблицы FTS3.

CREATE VIRTUAL TABLE t USING FTS3(text1, text2);

CREATE TABLE additional (id INTEGER PRIMARY KEY, hidden VARCHAR);

INSERT INTO t (docid, text1, text2) VALUES (243, 'foo', 'bar');
INSERT INTO additional VALUES (243, 'bas');

SELECT docid, text1, text2, hidden FROM t JOIN additional ON t.docid = additional.id WHERE t MATCH 'foo';
...