gpt4 book ai didi

ios - 无法使用 Objective C 在 SQLite 中执行重音/变音符号不敏感的搜索

转载 作者:行者123 更新时间:2023-11-29 12:57:41 29 4
gpt4 key购买 nike

我正在尝试根据我在 SO 和其他地方找到的各种示例来组合一个解决方案。

我有一个 SQLite 数据库,其中有一列带有重音字符串,即 église。我想搜索 eglise 以匹配 église

我在我的实现之外有一个用户定义的函数:

void withoutDiacritics(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((CFMutableStringRef)string, NULL, kCFStringTransformStripCombiningMarks, NO);
sqlite3_result_text(context, [string UTF8String], -1, SQLITE_TRANSIENT);
}
}

在查询之前,我创建了函数:

sqlite3_create_function_v2(db, "WithoutDiacritics", 1, SQLITE_ANY, NULL, &withoutDiacritics, NULL, NULL, NULL);

最后,我查询了一个 FTS3 虚拟表:

SELECT * FROM vTerms WHERE WithoutDiacritics(MasterField) MATCH '*eglise*'

不幸的是,即使 eglise 在表中没有重音符号,也不会返回任何内容。

如何将我的函数应用于数据库列?

附言我探索了包含一个没有变音符号的列以进行快速搜索的备份可能性。它运行良好,但更大的数据库大小让我超过了 iOS App Store 的 100mb 下载限制。

最佳答案

FTS 表不使用排序规则;你需要使用不同的 tokenizer例如 ICU 或 UNICODE61,或编写自定义分词器。

关于ios - 无法使用 Objective C 在 SQLite 中执行重音/变音符号不敏感的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20632789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com