1

我有一个使用 FTS4 的 SQLite 数据库。它用于存储具有以下形式的消息 ID 的电子邮件:

使用 FTS MATCH 语法搜索消息,我得到以下结果:

SELECT rowid FROM emails WHERE emails MATCH '<8200@comms.io>'

这将返回正确的行。但是当我尝试查找多封电子邮件时,我得到一个空回复:

SELECT rowid FROM emails WHERE emails MATCH '<8200@comms.io> OR <8188@comms.io>'

不过奇怪的是,我可以在没有尖括号字符的情况下进行搜索。这将返回两行:

SELECT rowid FROM emails WHERE emails MATCH '8200@comms.io OR 8188@comms.io'

即使尖括号存在于存储的列中也是如此。我找不到提到这些是 SQLite 中的特殊字符,并且没有“或”,单项搜索工作正常。

为什么在我的复合搜索中这些字符的处理方式不同?

4

1 回答 1

2

默认 ( simple) 标记器读取字母数字字符并将所有其他字符视为要忽略的单词分隔符。因此,在搜索消息 ID 时,您必须实际搜索包含多个单词(8200commsio)的短语。

如果要将整个消息 ID 视为一个单词,则必须编写自定义标记器。

于 2012-12-30T08:57:30.353 回答