SQLite / FTS3 / FTS4 / Android中用于撇号的自定义令牌字符?

时间:2018-09-24 18:35:15

标签: android sqlite android-sqlite sqlite4java

我的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实现是否会遇到一些限制。

有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果将撇号添加到tokenchars,则它将成为单词的一部分。这意味着您必须指定它才能找到它。

您实际上想忽略单引号而不破坏标记。似乎没有内置选项。您可以编写自定义令牌生成器,也可以在插入/搜索字符串之前删除此类字符。