#sqlite #match #full-text-search #fts5
Вопрос:
В документах SQLite FTS5 говорится, что поддерживаются такие поисковые запросы, как SELECT ... WHERE MATCH '<query1> NOT <query2>'
, но, похоже, унарный NOT
оператор не поддерживается.
Например, если я хочу найти все , что не соответствует <query>
, я не могу использовать MATCH 'NOT <query>'
. Мне пришлось бы использовать NOT MATCH '<query>'
, что совершенно другое (модуль FTS5 никогда не видит NOT
оператора, так как он находится за пределами кавычек). Поисковым запросом является только текст в кавычках.
Мне нужно найти способ использовать унарный NOT
оператор внутри поискового запроса. Я не могу использовать его снаружи, потому что я могу контролировать только текст поискового запроса, а не остальную часть инструкции SQL.
Возможный подход, о котором я думал, состоял бы в том, чтобы найти поисковый запрос, который соответствует чему-либо, и выполнить MATCH '<match_anything> NOT <query>'
его . Однако я не нашел способа сопоставить все в поисковом запросе.
Можете ли вы придумать способ, чтобы поведение унарного NOT
оператора было включено в поисковый запрос?
Ответ №1:
Попробуй это ..
SELECT * FROM docs
WHERE ROWID NOT IN (
SELECT ROWID FROM docs WHERE content MATCH '<query>'
)
Комментарии:
1. Хорошая идея! Однако, как я уже говорил в своем первоначальном вопросе, мне нужно найти способ использовать унарный
NOT
оператор внутри поискового запроса . Здесь это снаружи, так что в моем случае это бесполезно… Однако в общем случае это действительно работает как обходной путь!