2 回答
试试Hai Feng Kao 的字符标记器。它可以搜索前缀、后缀和介于两者之间的任何内容。它也支持中文。我认为您找不到任何其他支持任意子字符串搜索的标记器。
顺便说一句,这是一种无耻的自我推销。
如果要character
在 Objective-C 中打开由 tokenizer 编码的数据库,请执行以下操作:
#import <FMDB/FMDatabase.h>
#import "character_tokenizer.h"
FMDatabase* database = [[FMDatabase alloc] initWithPath:@"my_database.db"];
if ([database open]) {
// add FTS support
const sqlite3_tokenizer_module *ptr;
get_character_tokenizer_module(&ptr);
registerTokenizer(database.sqliteHandle, "character", ptr);
}
你也可以试试 FMDB 的 FMSimpleTokenizer。FMSimpleTokenizer 使用内置的 CFStringTokenizer 并且根据苹果文档“CFStringTokenizer 允许您以与语言无关的方式将字符串标记为单词、句子或段落。它支持日语和中文等不使用空格分隔单词的语言”
如果您检查 FMSimpleTokenizer 代码,您会发现这是通过调用 CFStringTokenizerAdvanceToNextToken 和 CFStringTokenizerGetCurrentTokenRange 完成的。
一个有趣的“事实”是 CFStringTokenizer 如何标记中文单词,例如“欢迎使用”将被标记为“欢迎”和“使用”,这完全有道理,但是如果你搜索“迎”,你会惊讶地看到根本没有结果!
在这种情况下,您可能需要编写一个分词器,例如 Hai Feng Kao 的 sqlite 分词器。