解决 Android SQLite 亚洲文本全文搜索问题

问题描述 投票:0回答:3

我读过很多帖子询问Android中是否可以进行基于SQLite的全文搜索,所有答案都指出Android内置的SQLite不允许自定义分词器。默认分词器会考虑用空格或其他符号分隔的单词,但亚洲单词(如中文)需要其特殊的分词器,但 Android 不允许添加自定义分词器。

我读过的帖子是几年前的了。最近的 Android 版本有更新吗?我刚刚搜索了一下,没有找到答案。

我正在考虑解决方法。在我将元组 INSERT 到 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 '没 有 解 决';  

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

android sqlite full-text-search fts3 fts4
3个回答
1
投票

对于 API Level 21 或更高版本,我测试发现 ICU tokenizer 已经可用。

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


0
投票

有更新吗?我在使用 sqlite 的中文 fts 中遇到同样的问题


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.