SQLite FTS5 文档说支持诸如
SELECT ... WHERE MATCH '<query1> NOT <query2>'
之类的搜索查询,但看起来不支持一元NOT
运算符。
例如,如果我想搜索 doesn't 与 <query>
匹配的
everything,我就不能使用
MATCH 'NOT <query>'
。我必须使用 NOT MATCH '<query>'
,这是完全不同的事情(FTS5 模块永远不会看到 NOT
运算符,因为它位于引号之外)。只有引号内的文本才是搜索查询。
我需要找到一种方法在搜索查询中使用一元
NOT
运算符。我不能在外面使用它,因为我只能控制搜索查询文本,而不能控制 SQL 语句的其余部分。
我想到的一种可能的方法是找到与任何内容匹配的搜索查询,然后执行MATCH '<match_anything> NOT <query>'
。但是,我发现无法匹配搜索查询中的所有内容。您能想出一种方法来
在搜索查询中具有一元NOT
运算符的行为吗?
SELECT * FROM docs
WHERE ROWID NOT IN (
SELECT ROWID FROM docs WHERE content MATCH '<query>'
)