Django结合__unaccent和__search Lookups

时间:2017-02-23 16:50:17

标签: python django postgresql orm

所以我尝试在同一个模型过滤器中使用__unaccent__search,但这样做时会收到错误。我试图使用术语“口袋妖怪”匹配术语“神奇宝贝”(注意“é”)

Game.objects.filter(title__unaccent__icontains="Pokemon")工作正常,但当我使用Game.objects.filter(title__unaccent__search="Pokemon)时,我收到以下错误:

  

在/ autocomplete-games / function unaccent(tsquery)

编程错误      

不存在第1行:... ALESCE(UNACCENT(“main_game”。“title”),''))   @@(UNACCENT(p ...                                                                ^提示:没有函数匹配给定的名称和参数类型。你可能需要   添加显式类型转换。

我正在使用:

Python 3.5

Django 1.10

PostgreSQL(安装了unaccent扩展)

1 个答案:

答案 0 :(得分:3)

执行此操作的方法是在数据库中定义自定义搜索配置,如:

CREATE TEXT SEARCH CONFIGURATION unaccent ( COPY = french );
ALTER TEXT SEARCH CONFIGURATION unaccent ALTER MAPPING FOR hword, hword_part, word WITH unaccent, simple;

我不是postgres专家,但这个配置对我有用。有关详细信息,请查看以下教程:http://www.nomadblue.com/blog/django/from-like-to-full-text-search-part-ii/

而不是在Django中使用它:

from django.contrib.postgres.search import SearchVector, SearchQuery

Game.objects.annotate(unaccent_title=SearchVector('title', config='unaccent')).filter(unaccent_title=SearchQuery('Pokemon', config='unaccent'))
相关问题