0

我读过很多帖子询问是否可以在 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 '没 有 解 决';  

但一个疑问是,它是否会为数据库文件花费更多的存储空间,因为空格中有双倍的字符。看起来所谓的“虚拟表”不仅存储了生成的索引,还存储了原始文本。

4

2 回答 2

0

对于 API 级别 21 或更高级别,我测试并发现 ICU 标记器已经可用。

对于较旧的设备,我在另一个问题中找到了一个变通解决方案: Android 上的 SQLite 是否使用为 FTS 启用的 ICU 标记器构建的?

于 2015-11-02T18:48:42.507 回答
-1

使用 NDK 编译您自己的 SQLite 副本,然后您可以使用它做任何您想做的事情。

于 2015-10-21T07:29:27.987 回答