Spec-Zone.ru › Django 4.1

Уникальные запросы для 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>']
Новое в Django 4.0.

Поиск 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>']

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

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/ref/contrib/postgres/lookups/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API