我从谷歌地图工作并使用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”?常用表达?怎么样?
答案 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?" )
这显然意味着您应该删除保存/更新操作的重音以保持一致性。这是一件令人伤心的事情,你的文字会失去所有口音的吸引力......永远!