[英]ios app compile sqlite fts with icu,but it cant get the perfect answer when i input a letter like “z”
在sqlite我:
create virtual MyTable (tokenize =icu ,id text,subject text,abstract text)
insert info MyTable (id,subject,abstract) values (?,?,?)
所以我有一行:今天天氣不錯fmowomrogmeog,wfomgomrg,我是誰erz 當我select id from MyTable where MyTable match 'z*'
執行select id from MyTable where MyTable match 'z*'
它不會返回任何內容,每當我搜索單個字母時它什么都不返回。 但是,如果我搜索“m”或“天氣”或“天”,它就會起作用。
我知道sqlite只支持前綴,所以我使用的是ICU。 我犯了錯誤嗎?
注意我已經查看了foxmail上的源代碼,它看起來像我可以搜索',''f'等等。
試試海風高的角色標記器 。 它可以搜索前綴,后綴和其間的任何內容。 它也支持中文。 我認為你不能找到任何支持任意子串搜索的其他標記器。
順便說一下,這是一種無恥的自我推銷。
如果要在Objective-C中打開由character
標記生成器編碼的數據庫,請執行以下操作:
#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 tokenizer這樣的標記器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.