2

我正在使用 fts(3 or 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' 

然后没有结果。

帮我!

4

2 回答 2

2

You must create the FTS table with a tokenizer that can handle Unicode characters, i.e., ICU or UNICODE61.

Please note that these tokenizers might not be available on all Android versions, and that the Android API does not expose any functions for adding user-defined tokenizers.

于 2013-07-01T07:30:41.203 回答
2

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

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

它只是不做任何其他事情。我不确定即使是 Unicode 标记器也会执行您需要的映射。(即在查询时将“Hồ”识别为“Hồ”和“Ho”。)

确实,当您查询时,该演示识别出“Hồ”;当您查询“Ho”时,它只是没有返回它,因为它没有将它们识别为等价物。如果您使用有限的一组受支持的 Unicode 字符,您可以实现自己的映射,并将“纯 ASCII 文本”保存在单独的列中以单独搜索。

于 2013-08-11T01:18:21.123 回答