簡體   English   中英

ios app用icu編譯sqlite fts,但是當我輸入像“z”這樣的字母時,它無法得到完美的答案

[英]ios app compile sqlite fts with icu,but it cant get the perfect answer when i input a letter like “z”

在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*'執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM