Поиск в PostgreSQL¶
Сходство триграмм¶
trigram_similar
¶
Поиск trigram_similar
позволяет выполнять триграммный поиск, измеряя количество общих триграмм (трех последовательных символов), используя специальное расширение PostgreSQL. Триграммный поиск задается выражением и возвращает результаты, у которых измерение сходства больше текущего порога сходства.
Чтобы использовать его, добавьте 'django.contrib.postgres'
в свой INSTALLED_APPS
и активируйте pg_trgm extension на PostgreSQL. Вы можете установить расширение с помощью операции миграции TrigramExtension
.
Поиск trigram_similar
может быть использован на CharField
и TextField
:
>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']
trigram_word_similar
¶
Поиск trigram_word_similar
позволяет выполнять поиск триграммного сходства слов с помощью специального расширения PostgreSQL. Его можно приблизительно понимать как измерение наибольшего числа триграмм, общих для параметра и любой подстроки поля. Триграммный поиск слов задается выражением и возвращает результаты, у которых измерение сходства слов больше текущего порога сходства.
Чтобы использовать его, добавьте 'django.contrib.postgres'
в свой INSTALLED_APPS
и активируйте pg_trgm extension на PostgreSQL. Вы можете установить расширение с помощью операции миграции TrigramExtension
.
Поиск trigram_word_similar
может быть использован на CharField
и TextField
:
>>> Sentence.objects.filter(name__trigram_word_similar="Middlesborough")
['<Sentence: Gumby rides on the path of Middlesbrough>']
trigram_strict_word_similar
¶
Аналогичен trigram_word_similar
, за исключением того, что заставляет границы экстентов совпадать с границами слов.
Чтобы использовать его, добавьте 'django.contrib.postgres'
в свой INSTALLED_APPS
и активируйте pg_trgm extension на PostgreSQL. Вы можете установить расширение с помощью операции миграции TrigramExtension
.
Поиск trigram_strict_word_similar
может быть использован на CharField
и 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
должен работать нормально. Однако запросы, использующие этот фильтр, обычно выполняют полное сканирование таблицы, что может быть медленным для больших таблиц. В таких случаях целесообразно использовать специальные инструменты полнотекстового индексирования.