我的Android应用程序包含一个SQLite表(全文搜索/ FTS3),该表包含以下数据:
格林的产品
在应用中,当用户搜索格林的产品时,就会找到匹配项。但是,当用户搜索绿色食品(即不带撇号)时,没有匹配项。
无论用户是否键入撇号,我都需要退回产品。
因此,我正在阅读documentation about FTS3 tokenizers,这表明我需要在tokenchars
参数中指定撇号。
所以我尝试像这样重新创建表:
CREATE VIRTUAL TABLE products USING fts3 (product_name TEXT, tokenize=simple "tokenchars='");
,但是当用户搜索绿色产品时,仍然没有匹配项。
我也尝试过:
CREATE VIRTUAL TABLE products USING fts3 (product_name TEXT, tokenize=simple "tokenchars=''");
(双撇号)
和
CREATE VIRTUAL TABLE products USING fts4 (product_name TEXT, tokenize=simple "tokenchars='");
(fts4)
和
CREATE VIRTUAL TABLE products USING fts4 (product_name TEXT, tokenize=simple "tokenchars=''");
(双撇号和fts4)
但是他们似乎都没有为我工作。
我不确定接下来要尝试什么。而且我也不确定由于Android的SQLite实现是否会遇到一些限制。
有人有什么建议吗?
答案 0 :(得分:1)
如果将撇号添加到tokenchars
,则它将成为单词的一部分。这意味着您必须指定它才能找到它。
您实际上想忽略单引号而不破坏标记。似乎没有内置选项。您可以编写自定义令牌生成器,也可以在插入/搜索字符串之前删除此类字符。