Запросы, специфичные для PostgreSQL

Сходство триграмм

Запрос trigram_similar позволяет искать триграммы, измеряя количество общих триграмм (три последовательных символа), используя расширение для PostgreSQL. Принимает выражение и возвращает результаты, у которых порог сходства выше определенного порога.

To use it, add 'django.contrib.postgres' in your INSTALLED_APPS and activate the pg_trgm extension on PostgreSQL. You can install the extension using the TrigramExtension migration operation.

Запрос trigram_similar может быть использован на CharField и на TextField:

>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']

Unaccent

Запрос unaccent позволяет вам выполнять поиск, игнорирующий акцентные знаки, с помощью специального расширения PostgreSQL.

Данный запрос реализован с помощью Transform, таким образом он может быть подключен к другим функциям запроса. Для того, чтобы воспользоваться этим запросом, вам потребуется добавить 'django.contrib.postgres' в параметр конфигурации INSTALLED_APPS и активировать расширений unaccent в PostgreSQL Существует миграция UnaccentExtension, которая позволяет выполнить активацию запроса с помощью механизма миграций.

Запрос unaccent может быть использован на CharField и на TextField:

>>> City.objects.filter(name__unaccent="México")
['<City: Mexico>']

>>> User.objects.filter(first_name__unaccent__startswith="Jerem")
['<User: Jeremy>', '<User: Jérémy>', '<User: Jérémie>', '<User: Jeremie>']

Предупреждение

Запросы unaccent должны хорошо работать в большинстве случаев. Однако, использующие этот фильтр запросы обычно будут выполнять полное сканирование таблицы, что не так быстро происходит на больших таблицах. В таких случаях целесообразно применять соответствующие инструменты для полнотекстового поиска.