2012-12-31 14 views
5

Questa è più una domanda di progettazione, non solo una domanda di codifica.Ricerca Android: Usa tabelle FTS insieme alle normali tabelle SQLite DB

Ho già un'app che memorizza i dati nelle tabelle del DB SQLite. Ora voglio aggiungere la funzione di ricerca in questo.

Capisco che per abilitare la funzione di ricerca ho bisogno di tabelle FTS.

Le tabelle che ho sono (non esattamente lo stesso, ma dando esempio molto simile):

tavolo Content - ha colonne come: Id, Titolo, Contento, Creato da, Created On, Modificato da, cambiato il etc ...

Commenti tavolo - ha colonne come: Id, Commenti, creato da, Created on, in risposta alla etc ...

Altri tavoli come i dati utente, Meta Data, Categorie , Tag ecc.

Qui voglio solo funzionalità di ricerca su titolo, contenuto e commenti. Ovviamente non ho bisogno di funzionalità di ricerca su altre colonne come creato da ecc.

Qual è l'opzione migliore?

  1. Devo eliminare le mie vecchie tabelle e creare SOLO tabelle FTS?
  2. Devo continuare a utilizzare le vecchie tabelle e creare nuove tabelle FTS che supportano solo la funzione di ricerca.

I problemi che vedo con l'opzione 1 sono:

  • Si tratta di un cambiamento dirompente!
  • Ho una serie di tabelle multiple con molte colonne non di testo su cui non intendo eseguire ricerche. Come li modifico in FTS?
  • In questo momento sto utilizzando le funzionalità di RDBMS come Join etc, che penso non sarò in grado di fare se passo completamente alle tabelle FTS!

I problemi che vedo con l'opzione 2 sono:

  • Esso si tradurrà in tabelle duplicate - e si consumano più memoria/spazio!
  • Ogni volta che inserisco/aggiorno/modifica una voce nelle mie tabelle SQL, devo fare lo stesso cambiamento nelle tabelle FTS.

Quindi, qual è l'opzione migliore? Qualcuno ha affrontato sfide simili?

risposta

9

Le tabelle FTS non possono essere interrogate in modo efficiente per ricerche non FTS, quindi l'opzione 1 è fuori.

L'intera tabella FTS è essenzialmente un indice. Questo è un compromesso velocità/spazio e la capacità di fare ricerche full-text di solito vale la pena. Per evitare di memorizzare il testo originale due volte, utilizzare external content tables.

Per mantenere sincronizzate le tabelle originali e FTS, utilizzare i trigger.

+0

Grazie per aver segnalato la sezione pertinente ... Ovviamente non ho letto l'intera documentazione .. –