我读过很多帖子询问是否可以在 Android 中完成基于 SQLite 的全文搜索,所有答案都指出 Android 的内置 SQLite 不允许自定义标记器。默认分词器考虑用空格或其他符号分隔的单词,但亚洲词(如中文)需要其特殊的分词器,但 Android 不允许添加自定义分词器。
我读的帖子是几年前的。最近的 Android 版本有更新吗?我只是搜索并没有找到答案。
我正在考虑一种解决方法。在我将元组插入到 FTS3/FTS4 虚拟表中进行索引之前,是否可以人为地在每个单词之间添加空格,以便默认的分词器可以将每个亚洲“单词”视为英语单词?在进行查询时,查询字符串也是如此,即添加了人工空格。
我在Linux中尝试过,看起来它可以工作。例如,如果我这样做,则亚洲文本的全文搜索是可以的:
CREATE VIRTUAL TABLE mail USING fts3(subject, body);
INSERT INTO mail(docid, subject, body) VALUES(4, 'software feedback', '这 个 Bug 还 没 有 解 决');
SELECT * FROM mail WHERE body MATCH '没 有 解 决';
但一个疑问是,它是否会为数据库文件花费更多的存储空间,因为空格中有双倍的字符。看起来所谓的“虚拟表”不仅存储了生成的索引,还存储了原始文本。