2012-12-31 7 views
5

Jest to raczej pytanie projektowe - nie tylko pytanie o kodowanie.Wyszukiwanie w Androidzie: używaj tabel FTS wraz z normalnymi tabelami SQLite

Mam już aplikację, która przechowuje dane w tabelach SQLite DB. Teraz chcę dodać do tego funkcję wyszukiwania.

Rozumiem, że w celu włączenia funkcji wyszukiwania potrzebuję tabel FTS.

tabele, które mam są (nie dokładnie takie same, ale daje bardzo podobny przykład):

stół zawartość - ma kolumny jak: id, tytuł, treść, utworzonych przez Dodany dnia, zmienił By, zmieniane etc ...

Komentarze stół - zawiera kolumny jak: id, komentarze, utworzonych przez Dodany dnia, w odpowiedzi na etc ...

innych tabel, takich jak dane użytkownika, meta danych, kategoriach , Tagi itp.

Tutaj chcę tylko możliwości wyszukiwania w tytule, treści i komentarze. Oczywiście nie potrzebuję możliwości wyszukiwania w innych kolumnach, takich jak utworzone przez itp.

Która opcja jest najlepsza?

  1. Czy należy odrzucić moje stare tabele i utworzyć TYLKO tabelę FTS?
  2. Należy nadal używać starych tabel i tworzyć nowe tabele FTS, które obsługują tylko funkcję wyszukiwania.

Problemy, które widzę z opcji 1 to:

  • Jest to uciążliwy zmiana!
  • Mam zestaw wielu tabel z wieloma kolumnami nietekstowymi, na których nie zamierzam wykonywać wyszukiwania. Jak mam je modelować w FTS?
  • W tej chwili używam funkcji RDBMS takich jak Join etc, które, jak sądzę, nie będę w stanie zrobić, jeśli przełączę się całkowicie na tabele FTS!

Problemy, które widzę z opcją 2 są:

  • Spowoduje to zduplikowanych tabel - i będzie zużywać więcej pamięci/miejsca!
  • Za każdym razem, gdy wstawiam/aktualizuję/modyfikuję wpis w moich tabelach SQL, muszę wprowadzić tę samą zmianę w tabelach FTS.

Jaka jest najlepsza opcja? Czy jakiekolwiek ciało zmagało się z podobnymi wyzwaniami?

Odpowiedz

9

Tabele FTS nie mogą być efektywnie wyszukiwane w przypadku wyszukiwań innych niż FTS, więc opcja 1 jest wyłączona.

Cała tabela FTS zasadniczo jest indeksem. To jest kompromis między szybkością i przestrzenią, a możliwość wykonywania wyszukiwania pełnotekstowego jest zazwyczaj warta. Aby uniknąć dwukrotnego przechowywania oryginalnego tekstu, użyj external content tables.

Aby zachować synchronizację oryginalnych i tabel FTS, użyj wyzwalaczy.

+0

Dzięki za wskazanie odpowiedniej sekcji ... Oczywiście nie przeczytałem całej dokumentacji .. –