【问题标题】:Django queries Especial CharactersDjango 查询特殊字符
【发布时间】:2011-05-30 12:05:21
【问题描述】:

我在谷歌地图上工作并使用 django 来定位。我的问题是:

我在request.GET['descricao'] 中有一个字符串,可以说它包含“Via rapida”。

在我的数据库中,我正在执行 store = "Via Rápida" :

local = Local.objects.filter(name__icontains=request.GET['descricao'])

这样我就可以得到很好的结果,比如“Via Rapida”,但是具有“Via rápida”的结果在查询中永远不会匹配(ASCI 字符可能是?)

如果字符串“Via rapida”匹配“via rápida”和“via rapida”,我该怎么办?常用表达?如何?

【问题讨论】:

    标签: python mysql sql django sqlite


    【解决方案1】:

    我认为更好的方法是使用 Full Text search 引擎,这里是一个可以与 django 一起使用的全文搜索引擎列表:

    我们不应该忘记Haystack,它是一个代理,可以使用不同的搜索引擎,如 solr、whoosh ...;

    您也可以使用数据库全文搜索,而无需使用诸如this 之类的第三个库。

    编辑: 从 OP 评论来看,QuerySet API 提供了仅适用于 MySQL 检查here 的全文搜索功能。

    【讨论】:

    • 所以经过几次尝试后,Djapian 和 Sphinx 都无法正常工作……现在将尝试嗖嗖声……
    • @Jorge Machado:是的,设置全文引擎并非易事,我记得第一次我想在我的一个 django 项目中使用全文搜索引擎时,我也花了一些时间让它们工作,实际上我已经尝试过 haystask,whoosh,Djapian,最后一个是我唯一能够设置的,:),希望你能比我做得更好:)
    • 在使用 Djapian 时,我收到了一个连线错误,说它找不到 xapian,我现在试试嗖嗖嗖嗖,希望它能工作......
    • @singularity:所以我没有安装任何东西,我在 django 查询中使用了搜索选项。它解决了我的大部分问题。像这样 local = Local.objects.filter(name__search=request.GET['descricao'])
    • @Jorge Machado:是的,如果您使用的是 MySQL,这将为您提供全文搜索功能,我会将其添加到我的答案中以供参考。
    【解决方案2】:

    如果您只对非 ascii 搜索感兴趣并且 icontains 满足您的需求,我会使用更简单的方法来规范化 ONLY 带有变音符号(重音)的 unicode 字符。

    # -*- coding: utf-8 -*-
    import unicodedata
    def strip_accents( text, encoding='ASCII'):
        return ''.join(
            (c for c in unicodedata.normalize('NFD', unicode(text))
            if unicodedata.category(c) != 'Mn') )
    
    if __name__ == "__main__":
        print strip_accents( u"Corrão quê a polícia vem aí! Será ¿")
        print strip_accents( u"Wie spricht man diessen Wörter aus?" )
    

    这显然意味着您应该去掉保存/更新操作的重点以保持一致性。可悲的是,您的文字将永远失去口音的所有吸引力!

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 2013-12-15
      • 1970-01-01
      • 2011-10-08
      • 2012-03-23
      • 2017-10-06
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多