如何在django 1.10中使用`unaccent`进行全文搜索?

时间:2016-06-14 17:26:33

标签: python django postgresql

我们正在开发一个项目,我们正在使用Django 1.10a1,我们正在使用带有PostgreSQL的django全文搜索,但我们需要使用unaccent。

所以,我有这段代码:

        search = 'Car'
        query_set = Article.objects.annotate(
            search=SearchVector(
                'content',
                'name'
                )
            ).filter(
            search__unaccent=search
        )

当我们尝试在unaccent之后添加search字词时,查询无效。 我们怎样才能让django全文搜索与postgress unaccent一起工作?

2 个答案:

答案 0 :(得分:7)

unaccent 扩展名安装到您的数据库中:

mydb=# CREATE EXTENSION unaccent;

基于另一个创建新的搜索配置:

mydb=# CREATE TEXT SEARCH CONFIGURATION french_unaccent( COPY = french );

unaccent 字典插入新的搜索配置:

mydb=# ALTER TEXT SEARCH CONFIGURATION french_unaccent
    ALTER MAPPING FOR hword, hword_part, word
    WITH unaccent, french_stem;

在Django查询中使用此配置:

search = 'Car'
query_set = Article.objects.annotate(
                search=SearchVector('content','name', config='french_unaccent')
            ).filter(search=SearchQuery(search, config='french_unaccent')))

答案 1 :(得分:0)

这对我来说很好:

query_set.annotate(col_lower=Unaccent(Lower(col_name))) 

谢谢。