gpt4 book ai didi

iphone - 适用于 iOS 的 SQLite - fts 表中的重音符(代字号)不敏感匹配

转载 作者:行者123 更新时间:2023-11-28 20:36:06 25 4
gpt4 key购买 nike

我在 sqlite 中为 iphone 启用了 fts 并尝试了这个并且工作,虽然非常慢:

SELECT field FROM table_fts WHERE replace(replace(replace(replace(replace(lower(field), 'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u') LIKE replace(replace(replace(replace(replace(lower('%string%'), 'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u')

但是当我想用MATCH的时候就不行了,没有给我带来结果,也没有报错

SELECT field FROM table_fts WHERE replace(replace(replace(replace(replace(lower(field), 'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u') MATCH replace(replace(replace(replace(replace(lower('string'), 'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u')

是否有任何错误或是否有任何其他方法可以进行波浪号不敏感搜索?我在网上查看了答案,但没有成功。

最佳答案

两种方法:

首先,您可以违反规范格式并向您的表中添加列,其中包含您的可搜索字段的仅 ASCII 表示形式。此外,在针对此辅助搜索列进行搜索之前,您还可以从正在搜索的字符串中删除国际字符(这样您就可以在具有仅 ASCII 表示的字段中查找仅 ASCII 字符串)。

顺便说一下,如果你想用 ASCII 对国际字符进行更通用的转换,你可以尝试类似的方法:

- (NSString *)replaceInternationalCharactersIn:(NSString *)text
{
NSData *stringData = [text dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

return [[[NSString alloc] initWithData:stringData encoding:NSASCIIStringEncoding] autorelease];
}

其次,您大概可以使用 sqlite3_create_function() 来编写您自己的函数(大概调用上述函数的排列),您可以直接在 SQL 语句本身中使用这些函数。查看SQLite documentation .

更新:

顺便说一下,鉴于您正在执行 FTS,sqlite3_create_function() 方法可能是不可能的,但令我印象深刻的是您可以在包含仅 ASCII 的字段上执行 FTS字符串,或编写您自己的 tokenizer它按照这些思路做了一些事情。

关于iphone - 适用于 iOS 的 SQLite - fts 表中的重音符(代字号)不敏感匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10466144/

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