【问题标题】:Sqlite3 diacritic insensitive search iphoneSqlite3 变音符号不敏感搜索 iphone
【发布时间】:2009-09-30 19:27:13
【问题描述】:

我有一个包含一些重音字符的数据库,我必须尽快进行不区分重音的搜索。 我尝试了两种解决方案:

  • 查询所有可能的重音组合。例如: 鲈鱼 鲈鱼 鲈鱼 佩尔什 佩尔什 pèrchè 佩尔切 佩尔谢 pérché

  • 重写 LIKE 运算符,我首先将所有重音字符替换为其各自的正常字符,然后像往常一样进行比较。

第一个显然太贵了,但第二个不够好。

有我缺少的解决方案吗?

谢谢 马可

【问题讨论】:

    标签: iphone sqlite


    【解决方案1】:

    其他一些方法。一切都取决于您可以对数据库执行哪些操作。

    • 在插入时或在某些预处理请求中从数据库中删除所有重音。
    • 定义一个 sqlite 运算符,在比较之前从字段中删除重音。

    【讨论】:

    • 我无法修改数据库中的数据。 LIKE 运算符替换执行您的建议,在比较之前删除重音。
    • 你可以为重音去除的结果设置一个索引吗?如果可能的话,您应该会获得巨大的性能提升。
    • 我在之前的评论中忽略了一个细节:like 运算符是否像名称所暗示的那样自行执行非重音比较(即:like(accented, unaccented))?如果是这样,那不完全是我的建议。如果更多地考虑使用非重音运算符并使用常见的 SQL 比较运算符。两者的区别在于可以索引一个不重音的参数,而不是带有两个参数的类似形式。
    • 我接受了你的提示,我已经制作了一个内容变音符号较少的数据库副本。然后我查询 diacritic less db 以获取 rowid 并最终从原始 db 中获得正确的结果。
    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2012-09-19
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多