2016-06-14 2 views
5

Мы работаем над проектом, и мы используем Django 1.10a1, мы используем полный текстовый поиск django с PostgreSQL, но нам нужно использовать unaccent.Как использовать `unaccent` с полнотекстовым поиском в django 1.10?

Итак, у меня есть этот код:

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

Когда мы пытались добавить unaccent слово после того, как search запрос не работает. Как мы можем получить полный текстовый поиск django для работы с постсекретарем без последствий?

ответ

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; 

Используйте эту конфигурацию в вашем Джанго запросе:

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

Вы также можете установить расширение непосредственно из Джанго, как описано здесь: https://docs.djangoproject.com/en/1.10/ref/contrib/postgres/operations/# unaccentextension – psychok7

Смежные вопросы