sqlite函数用于从阿拉伯语文本iOS xcode中删除重音

时间:2014-02-14 16:49:16

标签: ios sqlite

您好我正在使用sqlite FTS4和我的.sqlite文件在主Bundle中,我实现了这里提到的这个功能 How to deal with accented characters in iOS SQLite?

void unaccented(sqlite3_context *context, int argc, sqlite3_value **argv)
{
    if (argc != 1 || sqlite3_value_type(argv[0]) != SQLITE_TEXT) {
        sqlite3_result_null(context);
        return;
    }
    @autoreleasepool {
        NSMutableString *string = [NSMutableString stringWithUTF8String:(const char *)sqlite3_value_text(argv[0])];
        CFStringTransform((__bridge CFMutableStringRef)string, NULL, kCFStringTransformStripCombiningMarks, NO);
        sqlite3_result_text(context, [string UTF8String], -1, SQLITE_TRANSIENT);
    }
}

- (void)createUnaccentedFunction
{
    if (sqlite3_create_function_v2(euph, "unaccented", 1, SQLITE_ANY, NULL, &unaccented, NULL, NULL, NULL) != SQLITE_OK)
        NSLog(@"%s: sqlite3_create_function_v2 error: %s", __FUNCTION__, sqlite3_errmsg(euph));
}

我需要的以下查询不起作用(查询正常但没有结果),

SELECT term_id,eng_term, ara_term, type_id FROM mainporter where unaccented(ara_term) MATCH '%@' 

但是当使用我从手动删除重音的旧列时,我可以得到无重音的结果。所以功能正常工作

SELECT term_id,eng_term, unaccented(ara_term), type_id FROM mainporter where ara_term_2 MATCH '%@' 

有什么建议吗? 对不起,我不得不开始一个新的问题,但我不能评论,因为我没有50多声望(竖起大拇指)!!

1 个答案:

答案 0 :(得分:1)

FTS匹配仅适用于FTS表的列;你不能将MATCH应用于函数的结果。

要删除重音,请尝试UNICODE61 tokenizer,或实施您自己的custom tokenizer