2015-10-21 76 views
0

我已阅读过很多文章,询问是否可以在Android中完成基于SQLite的全文搜索,并且所有答案都指出Android内置的SQLite不允许自定义标记器。默认分词器会考虑用空格或其他符号分隔的词,但亚洲词(如中文)需要其特殊分词器,但Android不允许添加自定义分词器。解决Android SQLite全文搜索亚洲文本

我读过的帖子是多年前的。最近的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 '没 有 解 决'; 

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

+0

我只是发现有FTS4称为“无内容FTS4表”和“外部内容FTS4表”的功能。无内容表只存储索引而不存储内容,外部内容表可以存储独立于虚拟表的内容。所以我认为我可以用虚拟表格插入带有人造空白的文本,并将确切的文本存储在外部内容表中。这听起来像一个很好的解决方案.... –

回答

0

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

+0

我也读过这个。这样做会很困难吗? –

+0

如果你以前从未使用过NDK,那当然会很困难。 –