Поиск Android: используйте таблицы FTS вместе с обычными таблицами БД SQLite

Это скорее вопрос дизайна, а не просто вопрос кодирования.

У меня уже есть приложение, которое хранит данные в таблицах БД SQLite. Теперь я хочу добавить функцию поиска в это.

Я понимаю, что для включения функции поиска мне нужны таблицы FTS.

Таблицы, которые у меня есть (не совсем такие же, но приводят очень похожие примеры):

Таблица содержимого - содержит столбцы, такие как: идентификатор, заголовок, содержимое, созданный, созданный, измененный, измененный и т. Д.

Таблица комментариев - содержит столбцы, такие как: Id, Комментарии, Создано, Создано, В ответ и т. Д.

Другие таблицы, такие как данные пользователя, метаданные, категории, теги и т. Д.

Здесь я хочу только возможность поиска по заголовку, содержанию и комментариям. Очевидно, мне не нужны возможности поиска по другим столбцам, например, созданным и т. Д.

Какой самый лучший вариант?

  1. Должен ли я отказаться от своих старых таблиц и создать ТОЛЬКО таблицу FTS?
  2. Должен ли я продолжать использовать старые таблицы и создавать новые таблицы FTS, которые поддерживают только функцию поиска.

Проблемы, которые я вижу с вариантом 1:

  • Это разрушительное изменение!
  • У меня есть набор из нескольких таблиц со многими нетекстовыми столбцами, по которым я не собираюсь выполнять поиск. Как мне их моделировать в FTS?
  • Прямо сейчас я использую функции СУБД, такие как Join и т. Д., Которые, я думаю, я не смогу сделать, если полностью переключусь на таблицы FTS!

Проблемы, которые я вижу с вариантом 2:

  • Это приведет к дублированию таблиц - и будет занимать больше памяти / места!
  • Каждый раз, когда я вставляю / обновляю / изменяю запись в моих таблицах SQL, мне приходится делать одно и то же изменение в таблицах FTS.

Итак, что является лучшим вариантом? Кто-нибудь сталкивался с подобными проблемами?

1 ответ

Решение

Таблицы FTS не могут быть эффективно опрошены для поиска не FTS, поэтому опция 1 отсутствует.

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

Чтобы синхронизировать исходные таблицы и таблицы FTS, используйте триггеры.

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