Понимание FTS3/FTS4: что такое виртуальные таблицы и для поиска по ним есть не виртуальная таблица с возможностью поиска?

Я очень растерялся, прочитав первую часть документации по SQLite3 FTS3/FTS4. Причина, по которой я запутался, - это пример, разбросанный по всей сети, который, как мне кажется, не охватывает все возможные варианты использования, а другая причина - текущая ситуация, в которой я нахожусь. Сказав, что у меня есть таблица с именем Note, которая содержит два атрибут, тип которого TEXT и другие атрибуты, что очень важно для всего приложения.

Это очень простой стол. Я хотел предоставить полнотекстовый поиск, чтобы я мог искать как короткие заметки, так и длинные заметки, и именно тогда я столкнулся с этим FTS3/FTS4. Видите ли, хранить информацию как таковую очень просто, но у меня возникли проблемы с дизайном, особенно с тем, что происходит в моем приложении. Примеры в Интернете, особенно пример SearchableDictionary, предоставленный из каталога sdk, показывает только создание виртуальных таблиц и практически ничего более. Это не правда и дело для меня. У меня уже есть существующая таблица, другие атрибуты которой очень важны для приложения, и я никогда не планирую хранить их в виде текста в виртуальной таблице! Также нет единой виртуальной таблицы, все типы которой являются TEXT. Я могу предложить разделить ShortNote и LongNote на отдельную виртуальную таблицу и провести fts здесь через:

create virtual table virtual_note_table using fts3(_ID, ShortNote, LongNote);

Мне не нравится такой подход по нескольким причинам:

  1. Если я сделаю это, мне нужно будет поддерживать две таблицы: а) обычную таблицу SQLite, которую легко понять, б) виртуальную таблицу, в которой у меня есть ограниченные знания о том, как она будет работать в моей ситуации.

  2. Я думаю только о том, чтобы создать отдельную виртуальную таблицу и заполнить ее, когда я собираюсь провести поиск, и отбросить ее, когда я закончу. Источник контента будет исходить из таблицы, которая у меня уже есть. Но я не уверен, что это лучший способ сделать что-то, так как я беспокоюсь о космосе.

  3. Предположим, я беру оригинальную мысль, которая у меня была раньше, то есть полностью удалить ShortNote и LongNote из таблицы заметок и просто сохранить ссылку. Кажется, что это вообще невозможно присоединить виртуальную таблицу к не виртуальной таблице. Это ужасная концепция, и я никогда не видел ни статей, ни статей об этом, поэтому, может быть, я просто полностью неправильно понял виртуальные таблицы FTS3 / FTS4!

Я полностью потерян и нуждаюсь в помощи относительно дизайна. Мне очень нужна функция полного поиска по данным (ShortNote и LongNote). Я думаю, что мой лучший снимок #2.

Буду признателен за любые советы.

1 ответ

Решение

Копирование всего текста в (временную) таблицу FTS будет довольно медленным.

Чтобы избежать накладных расходов на хранение дубликатов текста в двух таблицах, вы можете использовать таблицу внешнего содержимого.

Чтобы синхронизировать данные в двух таблицах, вы можете использовать триггеры; см. ссылку выше для примера.

Другие вопросы по тегам