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

Sal*_*Din 5 python django postgresql

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

所以,我有这个代码:

        search = 'Car'
        query_set = Article.objects.annotate(
            search=SearchVector(
                'content',
                'name'
                )
            ).filter(
            search__unaccent=search
        )
Run Code Online (Sandbox Code Playgroud)

当我们尝试在查询不起作用unaccent后添加单词时search.我们怎样才能让django全文搜索与postgress unaccent一起工作?

Pon*_*ech 7

unaccent扩展安装到数据库中:

mydb=# CREATE EXTENSION unaccent;
Run Code Online (Sandbox Code Playgroud)

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

mydb=# CREATE TEXT SEARCH CONFIGURATION french_unaccent( COPY = french );
Run Code Online (Sandbox Code Playgroud)

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

mydb=# ALTER TEXT SEARCH CONFIGURATION french_unaccent
    ALTER MAPPING FOR hword, hword_part, word
    WITH unaccent, french_stem;
Run Code Online (Sandbox Code Playgroud)

在Django查询中使用此配置:

search = 'Car'
query_set = Article.objects.annotate(
                search=SearchVector('content','name', config='french_unaccent')
            ).filter(search=SearchQuery(search, config='french_unaccent')))
Run Code Online (Sandbox Code Playgroud)