• 3.1
  • 3.2
  • 5.0
  • Версия документации: 6.1

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

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

trigram_similar

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

Чтобы использовать его, добавьте 'django.contrib.postgres' в свой INSTALLED_APPS и активируйте ``расширение pg_trgm`_ в PostgreSQL. Вы можете установить расширение, используя операцию миграции TrigramExtension.

Поиск trigram_similar можно использовать для CharField и TextField:

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

trigram_word_similar

Поиск trigram_word_similar позволяет вам выполнять поиск сходства слов триграммы, используя специальное расширение PostgreSQL. Приблизительно его можно понимать как измерение наибольшего количества триграмм, общих для параметра и любой подстроки поля. Поиск слов в триграммах получает выражение и возвращает результаты, у которых измерение сходства слов превышает текущий порог сходства.

Чтобы использовать его, добавьте 'django.contrib.postgres' в свой INSTALLED_APPS и активируйте ``расширение pg_trgm`_ в PostgreSQL. Вы можете установить расширение, используя операцию миграции TrigramExtension.

Поиск trigram_word_similar можно использовать для CharField и TextField:

>>> Sentence.objects.filter(name__trigram_word_similar="Middlesborough")
['<Sentence: Gumby rides on the path of Middlesbrough>']

trigram_strict_word_similar

Аналогично trigram_word_similar, за исключением того, что он заставляет границы экстента совпадать с границами слов.

Чтобы использовать его, добавьте 'django.contrib.postgres' в свой INSTALLED_APPS и активируйте ``расширение pg_trgm`_ в PostgreSQL. Вы можете установить расширение, используя операцию миграции TrigramExtension.

Поиск trigram_strict_word_similar можно использовать для CharField и TextField.

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 должны хорошо работать в большинстве случаев. Однако, использующие этот фильтр запросы обычно будут выполнять полное сканирование таблицы, что не так быстро происходит на больших таблицах. В таких случаях целесообразно применять соответствующие инструменты для полнотекстового поиска.

Back to Top