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