3

我在我的场景中遇到了一些特殊字符的问题。我有一个使用 fts3 创建的 sqlite 数据库。

当我使用SELECT col_1, col_2, offsets(table) FROM table WHERE table MATCH 'h*' LIMIT 50;

我能够得到以h开头的单词。

但是当我使用

SELECT col_1, col_2, offsets(table) FROM table WHERE table MATCH '@*' LIMIT 50;

我没有得到以@开头的字符串。

我哪里错了?任何有关方法的指针都会很棒。

4

1 回答 1

0

我认为您描述的行为发生是因为SQLite FTS3 默认使用称为“简单”的标记器。字符 @ 被丢弃,因为它不是字母数字字符,其 UTF 代码点不大于 127。我对此的解释是 FTS 不是用于搜索特殊字符,而是用于搜索自然文本。

我建议的解决方法是不要对此类查询使用 FTS,而是使用 LIKE 运算符。或者您可以尝试搜索其他可用的标记器或在 C 中编写您的

于 2012-04-19T14:42:44.687 回答