2010-04-12 8 views

Répondre

6

Assurez-vous de créer des colonnes appropriées FTS dans l'indice FTS:

CREATE VIRTUAL TABLE email_fts USING fts3(subject, body, "to", "from"); 

Et vous pouvez effectuer une recherche individuelle colonnes FTS:

SELECT rowid 
FROM email_fts 
WHERE "to" MATCH '[email protected]' 

UNION 

SELECT rowid 
FROM email_fts 
WHERE "from" MATCH '[email protected]' 

EDIT: Ma réponse précédente avait une OR dans la clause WHERE. Apparemment, sqlite ne supporte pas la combinaison des requêtes OR avec les conditions MATCH. L'union ci-dessus fonctionne.

Les documents FTS sont ici, c'est l'un des exemples utilisés dans les docs.

http://sqlite.org/fts3.html

+0

Pas en mesure de trouver un doc connexe. j'ai eu erreur comme ceci: sqlite> .schema email_fts CREATE TABLE VIRTUEL [email_fts] à l'aide fts3 ( [de], [sujet], [corps], [à], [cc], [f > nom] sqlite> SELECT * FROM email_FTS WHERE "à" MATCH '[email protected]' OU "de" MATCH 'b @ c. com '; erreur SQL: impossible d'utiliser MATCH fonction dans le contexte demandé sqlite> – Manoj

+3

@Manoj, je ne savais pas SQLite ne supporte pas la combinaison '' OR' avec MATCH'. Étrange. J'ai mis à jour la réponse pour utiliser un «UNION» qui fonctionne bien. Si vous avez besoin de combiner avec des données non-FTS, vous pouvez envelopper l'union dans une sous-requête et la joindre à d'autres tables. –

Questions connexes