作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!