Есть ли способ поиска определенной строки в столбце?SQLite fts3: поиск строки в столбце
Я хочу, чтобы искать как SELECT * FROM email_fts WHERE MATCH email_fts 'в: "[email protected]" ИЛИ от: "[email protected]"'
Спасибо заранее,
Манодж
Есть ли способ поиска определенной строки в столбце?SQLite fts3: поиск строки в столбце
Я хочу, чтобы искать как SELECT * FROM email_fts WHERE MATCH email_fts 'в: "[email protected]" ИЛИ от: "[email protected]"'
Спасибо заранее,
Манодж
Убедитесь, что вы создали соответствующие 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 приведены здесь, это один из примеров, используемых в документах.
Не удалось найти соответствующий документ. я получил ошибку, как это: 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
@Manoj, я не понимаю, SQLite не поддерживает объединение '' OR' с MATCH'. Странный. Я обновил ответ, чтобы использовать «UNION», который отлично работает. Если вам нужно объединить данные, отличные от FTS, вы можете обернуть объединение в подзапрос и присоединиться к ним в других таблицах. –