所以我尝试在同一个模型过滤器中使用__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扩展)
答案 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'))