В следующем разделе мы добавим в блог возможности поиска. Поиск в базе данных на основе вводимых пользователем данных находит широкое применение в веб-приложениях.
Встроенный в Django ORM-преобразователь позволяет выполнять простые операции сопоставления, используя, например, фильтр contains(или его нечувствительную к регистру версию icontains).
Следующий ниже запрос можно использовать, чтобы найти посты, содержащие слово framework в их теле:
from blog.models import Post
Post.objects.filter(body__contains='framework')
Однако если вы хотите выполнять сложные операции поиска, извлекая результаты по сходству или взвешивая термины на основе частоты их встречаемости в тексте или степени важности различных полей (например, релевантности термина, появляющегося в заголовке по сравнению с его появлением теле), то необходимо задействовать полнотекстовый поисковый механизм.
При рассмотрении больших блоков текста формирование запросов с операциями над цепочками символов становится недостаточным. Полнотекстовый поиск сравнивает фактические слова с сохраненным контентом, пытаясь удовлетворить критериям поиска.
Django предоставляет мощную функциональность поиска, построенную поверх функциональных возможностей реляционной базы данных PostgreSQL по полнотекстовому поиску.
Модуль django.contrib.postgres предоставляет функциональности, предлагаемые базой данных PostgreSQL, которые не являются общими для других, поддерживаемых веб-фреймворком Django, баз данных.
О поддержке принятого в PostgreSQL полнотекстового поиска можно узнать на странице https://www.postgresql.org/docs/15/textsearch.html.
Хотя веб-фреймворк Django не зависит от базы данных, он предоставляет модуль, который поддерживает часть богатого набора функциональных возможностей, предлагаемого базой данных PostgreSQL, которого нет в других, поддерживаемых Django, базах данных.
Установка базы данных PostgreSQL
В настоящее время в проекте mysite используется база данных SQLite. Поддержка полнотекстового поиска SQLite ограничена, и Django не поддерживает его прямо «из коробки».
Однако PostgreSQL подходит для полнотекстового поиска гораздо лучше, и мы можем воспользоваться модулем django.contrib.postgres, чтобы задействовать возможности полнотекстового поиска PostgreSQL.
Мы выполним миграции данных из SQLite в PostgreSQL, чтобы применить ее функциональные возможности полнотекстового поиска.
База данных SQLite приемлема для целей разработки. Однако для производственной среды вам понадобится более мощная база данных, такая как PostgreSQL, MariaDB, MySQL или Oracle.
Скачайте установщик PostgreSQL для macOS или Windows на странице https://www.postgresql.org/download/.
На той же странице вы найдете инструкции по установке PostgreSQL в различных дистрибутивах Linux. Следуйте инструкциям на веб-сайте по установке и запуску PostgreSQL.
Если вы используете macOS и решили установить PostgreSQL с помощью Postgres.app, то вам нужно будет настроить переменную $PATH, чтобы применить инструменты командной строки, как описано на странице https://postgresapp.com/documentation/cli-tools.html.
Установка PostgreSQL на Windows 11
Для установки базы данных PostgreSQL в Windows перейдем по ссылке https://www.postgresql.org/download/windows/ и нажмем нажмём на ссылку "Download the installer certified by EDB for all supported PostgreSQL versions".
Cкачаем 15 версию, в нашем случае это будет postgresql-15.5-1-windows-x64.exe и приступим к её установке:
Нажимаем Next, проверяем установлены ли все галочки:
Далее вам будет предложено выбрать каталог для установки базы данных. Оставьте каталог данных по умолчанию и нажмите Next.
Затем в этом окне нам нужно придумать пароль для нашего суперпользователя, с помощью которого мы сможем создавать пользователей и создавать новые базы данных:
Порт мы также оставляем по умолчанию:
Не меняем ничего и идем далее:
После завершения установки мы увидим данное окно:
Снимаем галочку с Stack Builder, это действие является необязательным:
На этом установка нашей БД PostgreSQL на Windows закончена.
Вам также необходимо установить PostgreSQL-адаптер Psycopg 3 для Python. Выполните следующие ниже команды в командной оболочке виртуальной среды, чтобы его установить:
pip install --upgrade pip # upgrade pip to at least 20.3
pip install "psycopg[binary]"
Посмотреть документацию на Psycopg 3 можно на официальной странице https://www.psycopg.org/psycopg3/docs/index.html.