Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How use `unaccent` with full text search in django 1.10?

We are working on a project and we are using Django 1.10a1, we're using django full text search with PostgreSQL but we need to use unaccent.

So, I have this code:

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

When we tried adding unaccent word after search the query doesn't work. How can we get django full text search to work with postgress unaccent?

like image 348
SalahAdDin Avatar asked Jun 14 '16 17:06

SalahAdDin


1 Answers

Install the unaccent extension into your database:

mydb=# CREATE EXTENSION unaccent;

Create a new search configuration, based on an other one:

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

Insert the unaccent dictionary into your new search configuration:

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

Use this configuration in your Django query :

search = 'Car'
query_set = Article.objects.annotate(
                search=SearchVector('content','name', config='french_unaccent')
            ).filter(search=SearchQuery(search, config='french_unaccent')))
like image 51
Ponytech Avatar answered Oct 13 '22 19:10

Ponytech