0

我的 Android 应用程序包含一个 SQLite 表(全文搜索/FTS3),其中包含以下数据:

格林产品

在应用程序中,当用户搜索Green's Product时,会找到匹配项。但是当用户搜索Greens Product(即,没有撇号)时,没有匹配项。

无论用户是否输入撇号,我都需要退回产品。

所以我一直在阅读有关 FTS3 标记器的文档,这表明我需要在tokenchars参数中指定撇号。

所以我尝试像这样重新创建我的表:

CREATE VIRTUAL TABLE products USING fts3 (product_name TEXT, tokenize=simple "tokenchars='");

但是当用户搜索Greens Product时仍然没有匹配。

我也试过:

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 实现而遇到一些限制。

有没有人有什么建议?

4

1 回答 1

1

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

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

于 2018-09-24T18:41:35.033 回答