android中的SQLite全文搜索unicode

时间:2013-07-01 01:33:24

标签: sqlite search unicode full-text-search

我正在使用fts(3或4)

在SQLite中创建一个表
CREATE VIRTUAL TABLE Demo1 USING fts3(content TEXT);

insert into Demo1 values('Hồ Thanh Long'),('Nguyễn Văn A')

搜索时:

select * from Demo1 where content  Match 'Hồ' 

然后结果是:

'Hồ Thanh Long'

搜索时:

select * from Demo1 where content  Match 'Ho' 

然后没有结果。

帮助我!

2 个答案:

答案 0 :(得分:2)

您必须使用可以处理Unicode字符的tokenizer创建FTS表,即ICUUNICODE61

请注意,这些令牌化程序可能并非在所有Android版本上都可用,并且Android API不会公开任何用于添加用户定义的标记化程序的函数。

答案 1 :(得分:2)

android的默认“简单”标记生成器支持unicode:

  

其中符合条件的字符都是字母数字字符和全部字符   Unicode代码点值大于或等于128的字符。

它没有做任何其他事情。我甚至不确定Unicode标记器是否会执行您需要的映射。 (即在查询时将'Hồ'识别为'Hồ'和'Ho'。)

事实上,当您查询时,演示会认出'Hồ';当你查询'Ho'时它只是没有返回它,因为它不认为它们是等价的。如果使用一组受限制的Unicode字符,则可以实现自己的映射,并将“纯ASCII文本”保存在单独的列中以单独搜索。