在Django中使用与SearchVector和SearchQuery的unaccent

时间:2017-11-10 20:23:24

标签: django postgresql full-text-search

我在Django中安装了UnaccentExtension,但在使用此搜索时遇到问题:

vector = SearchVector('title__unaccent', 'abstract__unaccent')
query = SearchQuery(word) | SearchQuery(word2)
files = Doc.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')

这是错误:

  

无法将关键字'unaccent'解析为字段。加入“标题”是不允许的。

使用最简单的搜索功能,它可以正常工作:

Doc.objects.filter(title__unaccent=word)

那么,我做错了什么?

1 个答案:

答案 0 :(得分:3)

你不能在'SearchVector'中使用'unaccent',但你必须在PostgreSQL中定义一个新的“unaccented”配置。

  1. 如果您错过了installs the unaccent extension
  2. 在PostgrSQL中创建非重音字典,或者在此SQL中使用empty migrations

    CREATE TEXT SEARCH CONFIGURATION french_unaccent( COPY = french );
    ALTER TEXT SEARCH CONFIGURATION french_unaccent
    ALTER MAPPING FOR hword, hword_part, word
    WITH unaccent, french_stem;
    
  3. 在Django查询中使用此配置:

    SearchVector('title','abstract', config='french_unaccent')
    SearchQuery(word, config='french_unaccent')
    
  4. 您可以在各种official PostgreSQL documentation

    articles中找到有关此类配置的更多信息