2010-04-12 3 views

ответ

6

Убедитесь, что вы создали соответствующие FTS столбцы в индексе FTS:

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

И тогда вы можете искать отдельные FTS колонки:

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

UNION 

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

EDIT: Мой предыдущий ответ был OR в пункте WHERE. По-видимому, sqlite не поддерживает объединение OR запросов с условиями MATCH. Вышеупомянутый союз работает.

Документы FTS приведены здесь, это один из примеров, используемых в документах.

http://sqlite.org/fts3.html

+0

Не удалось найти соответствующий документ. я получил ошибку, как это: SQLite> .schema email_fts CREATE VIRTUAL TABLE [email_fts] ИСПОЛЬЗОВАНИЕ FTS3 ( [с], [предмет], [тело], [к], [см], [е ilename] sqlite> SELECT * FROM email_FTS WHERE "to" MATCH '[email protected]' ИЛИ ​​"от" MATCH 'b @ c. com '; SQL ошибка: не может использовать функцию MATCH в запрашиваемом контексте SQLite> – Manoj

+3

@Manoj, я не понимаю, SQLite не поддерживает объединение '' OR' с MATCH'. Странный. Я обновил ответ, чтобы использовать «UNION», который отлично работает. Если вам нужно объединить данные, отличные от FTS, вы можете обернуть объединение в подзапрос и присоединиться к ним в других таблицах. –

Смежные вопросы