Поиск Android: используйте таблицы FTS вместе с обычными таблицами БД SQLite
Это скорее вопрос дизайна, а не просто вопрос кодирования.
У меня уже есть приложение, которое хранит данные в таблицах БД SQLite. Теперь я хочу добавить функцию поиска в это.
Я понимаю, что для включения функции поиска мне нужны таблицы FTS.
Таблицы, которые у меня есть (не совсем такие же, но приводят очень похожие примеры):
Таблица содержимого - содержит столбцы, такие как: идентификатор, заголовок, содержимое, созданный, созданный, измененный, измененный и т. Д.
Таблица комментариев - содержит столбцы, такие как: Id, Комментарии, Создано, Создано, В ответ и т. Д.
Другие таблицы, такие как данные пользователя, метаданные, категории, теги и т. Д.
Здесь я хочу только возможность поиска по заголовку, содержанию и комментариям. Очевидно, мне не нужны возможности поиска по другим столбцам, например, созданным и т. Д.
Какой самый лучший вариант?
- Должен ли я отказаться от своих старых таблиц и создать ТОЛЬКО таблицу FTS?
- Должен ли я продолжать использовать старые таблицы и создавать новые таблицы FTS, которые поддерживают только функцию поиска.
Проблемы, которые я вижу с вариантом 1:
- Это разрушительное изменение!
- У меня есть набор из нескольких таблиц со многими нетекстовыми столбцами, по которым я не собираюсь выполнять поиск. Как мне их моделировать в FTS?
- Прямо сейчас я использую функции СУБД, такие как Join и т. Д., Которые, я думаю, я не смогу сделать, если полностью переключусь на таблицы FTS!
Проблемы, которые я вижу с вариантом 2:
- Это приведет к дублированию таблиц - и будет занимать больше памяти / места!
- Каждый раз, когда я вставляю / обновляю / изменяю запись в моих таблицах SQL, мне приходится делать одно и то же изменение в таблицах FTS.
Итак, что является лучшим вариантом? Кто-нибудь сталкивался с подобными проблемами?
1 ответ
Таблицы FTS не могут быть эффективно опрошены для поиска не FTS, поэтому опция 1 отсутствует.
Вся таблица FTS по сути является индексом. Это компромисс между скоростью и пространством, и возможность полнотекстового поиска обычно того стоит. Чтобы не сохранять исходный текст дважды, используйте таблицы внешнего содержимого.
Чтобы синхронизировать исходные таблицы и таблицы FTS, используйте триггеры.