SQLite 虚拟表匹配转义字符

Wys*_*wyg 3 sqlite full-text-search

我正在研究索引存储在 SQLite FTS3 虚拟表中的应用程序。我们正在实施全文匹配,这意味着我们通过以下查询发送:

select * from blah where term match '<insert term here>'
Run Code Online (Sandbox Code Playgroud)

这一切都很好,直到我们想要匹配的术语包含一个连字符,以防 SQLite 虚拟匹配语法将 bacon-and-eggs 解释为 bacon, not and, not Eggs。

有谁知道使 fts 表忽略连字符的转义字符?我尝试添加 ESCAPE '\' 子句并在每个连字符之前使用 \,但 match 语句拒绝该语法。

谢谢。

Emi*_*röm 5

有很多 FTS 认为“特殊”的字符串需要转义。最简单的方法是在要搜索的字符串周围添加双引号。

示例 1:假设您要搜索的术语是bacon-and-eggs

select * from blah where term match '"bacon-and-eggs"'
Run Code Online (Sandbox Code Playgroud)

这也将整个字符串视为一个短语,因此以不同顺序使用相同单词的命中不会产生任何命中。为了解决这个问题,您可以单独引用每个单词。

示例 2:假设您要搜索的术语是bacon and eggs

select * from blah where term match '"bacon" "and" "eggs"'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助某人!