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
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
@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. –