Django查询特殊字符

时间:2010-12-24 19:18:27

标签: python mysql sql django sqlite

我从谷歌地图工作并使用django来。我的问题是:

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

在我的数据库中我有store =“ViaRápida”我正在做:

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

因为我可以像“通过Rapida”那样得到很好的效果,但是“Viarápida”的结果永远不会在查询中得到匹配(ASCI角色可能是?)

我必须做一个字符串“Via rapida”匹配“viarápida”和“via rapida”?常用表达?怎么样?

2 个答案:

答案 0 :(得分:2)

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

我们不应该忘记Haystack这是一个可以使用不同搜索引擎的代理,比如solr,嗖......“

您还可以使用数据库全文搜索,而无需使用类似this的第三个库。

修改 从OP注释中,QuerySet API提供全文搜索功能,该功能仅适用于MySQL检查here

答案 1 :(得分:1)

如果您只对非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?" )

这显然意味着您应该删除保存/更新操作的重音以保持一致性。这是一件令人伤心的事情,你的文字会失去所有口音的吸引力......永远!