Django 5 для начинающих

Прогресс по курсу:  9/1004

6.11 Добавление полнотекстового поиска в блог
4 из 4 шагов пройдено

Простые операции поиска

Отредактируйте файл settings.py проекта, добавив django.contrib.postgres в настроечный параметр INSTALLED_APPS, как показано ниже:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',
    'taggit',
    'django.contrib.sites',
    'django.contrib.sitemaps',
    'django.contrib.postgres',
]

Откройте оболочку Django, выполнив следующую ниже команду в системной командной оболочке:

python manage.py shell

Теперь можно выполнять поиск по одному полю, используя операцию search набора запросов QuerySet.

Выполните следующий ниже исходный код в оболочке Python:

from blog.models import Post
Post.objects.filter(title__search='django')

В этом запросе PostgreSQL используется для того, чтобы создать поисковый вектор для поля title и поисковый запрос из термина django. Результаты получаются путем сопоставления запроса с вектором.

Поиск по нескольким полям

Возможно, вам захочется выполнить поиск по нескольким полям. В этом случае необходимо определить объект SearchVector.

Давайте сформируем вектор, который позволит выполнять поиск по полям title и body модели Post.

Выполните следующий ниже исходный код в оболочке Python:

>>> from django.contrib.postgres.search import SearchVector
>>> from blog.models import Post
>>>
>>> Post.objects.annotate(
...	search=SearchVector('title', 'body'),
... ).filter(search='django')

Используя annotate и определяя SearchVector с обоими полями, предоставляется функциональность сопоставления запроса как с заголовком, так и с телом постов.

Полнотекстовый поиск –это интенсивный процесс. Если вы выполняете поиск среди нескольких сотен строк, то вам следует определить функциональный индекс, который сопоставляется с используемым поисковым индексом. Django предоставляет поле SearchVectorField для ваших моделей.

Подробнее об этом можно почитать по адресу https://docs.djangoproject.com/en/4.2/ref/contrib/postgres/search/#performance.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

чтобы создать поисковый вектор для поля body и поисковый запрос из термина django

Вроде речь выше идет о поле title

@Anonymous_450292901, спасибо, исправил.

а есть ли что-то подобное когда используешь Sqlite3 ?

@Vlad_Kirnats, в Django поддерживается полнотекстовый поиск через SearchVector только для PostgreSQL.