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

Copyright ©2020 All rights reserved