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

Copyright ©2021 All rights reserved