ios应用程序用icu编译sqlite fts,但是当我输入一个像“z”这样的字母时它不能得到完美的答案

use*_*169 4 sqlite icu ios

在sqlite中我:

  1. 执行一个 create virtual MyTable (tokenize =icu ,id text,subject text,abstract text)
  2. 然后成功insert info MyTable (id,subject,abstract) values (?,?,?) 所以我有行???????fmowomrogmeog?wfomgomrg????erz

当我执行select id from MyTable where MyTable match ‘z*’它不返回任何东西?每当我搜索单个字母时它什么都不返回。但是,如果我搜索“m”或“??” 或'?'?它有效。

我知道 sqlite 只支持前缀,所以我使用的是 ICU。我犯了一个错误吗?

请注意,我已经查看了 Foxmail 上的源代码,在我看来,我可以搜索“、”、“f”等。

Hai*_*Kao 5

试试Hai Feng Kao 的字符标记器。它可以搜索前缀、后缀以及介于两者之间的任何内容。它也支持中文。我认为您找不到任何其他支持任意子字符串搜索的标记器。

顺便说一句,这是一种无耻的自我推销。

如果要character在 Objective-C 中打开由标记器编码的数据库,请执行以下操作:

#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);
}
Run Code Online (Sandbox Code Playgroud)