SQLite FTS5 MATCH 查询中的一元 NOT

问题描述 投票:0回答:2

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

运算符的行为吗

sqlite match full-text-search fts5
2个回答
0
投票
试试这个..

SELECT * FROM docs WHERE ROWID NOT IN ( SELECT ROWID FROM docs WHERE content MATCH '<query>' )
    

0
投票
或者试试这个:

(technology OR pace) NOT mobile

https://sqlite.org/fts5.html(第 3.7 节)

© www.soinside.com 2019 - 2024. All rights reserved.