Поиск в PostgreSQL

Сходство триграмм

trigram_similar

Поиск trigram_similar позволяет выполнять триграммный поиск, измеряя количество общих триграмм (трех последовательных символов), используя специальное расширение PostgreSQL. Триграммный поиск задается выражением и возвращает результаты, у которых измерение сходства больше текущего порога сходства.

To use it, add 'django.contrib.postgres' in your INSTALLED_APPS and activate the pg_trgm extension on PostgreSQL. You can install the extension using the TrigramExtension migration operation.

Поиск trigram_similar можно использовать для CharField и TextField:

>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']

trigram_word_similar

The trigram_word_similar lookup allows you to perform trigram word similarity lookups using a dedicated PostgreSQL extension. It can be approximately understood as measuring the greatest number of trigrams shared between the parameter and any substring of the field. A trigram word lookup is given an expression and returns results that have a word similarity measurement greater than the current similarity threshold.

To use it, add 'django.contrib.postgres' in your INSTALLED_APPS and activate the pg_trgm extension on PostgreSQL. You can install the extension using the TrigramExtension migration operation.

The trigram_word_similar lookup can be used on CharField and TextField:

>>> Sentence.objects.filter(name__trigram_word_similar='Middlesborough')
['<Sentence: Gumby rides on the path of Middlesbrough>']

trigram_strict_word_similar

New in Django 4.2.

Аналогичен trigram_word_similar, за исключением того, что заставляет границы протяженности совпадать с границами слов.

To use it, add 'django.contrib.postgres' in your INSTALLED_APPS and activate the pg_trgm extension on PostgreSQL. You can install the extension using the TrigramExtension migration operation.

The trigram_strict_word_similar lookup can be used on CharField and TextField.

Unaccent

Поиск unaccent позволяет выполнять поиск без учета ударения с помощью специального расширения PostgreSQL.

Этот поиск реализован с помощью Transform, поэтому его можно объединить в цепочку с другими функциями поиска. Чтобы использовать его, вам нужно добавить 'django.contrib.postgres' в ваш INSTALLED_APPS и активировать unaccent extension on 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 должен работать нормально. Однако запросы, использующие этот фильтр, обычно выполняют полное сканирование таблицы, что может быть медленным для больших таблиц. В таких случаях целесообразно использовать специальные инструменты полнотекстового индексирования.

Вернуться на верх