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