Поиск
Поиск находит посты, пользователей и темы на странице /discovery.
Обзор
По умолчанию поиск работает через базу данных и не требует дополнительных сервисов. Вместо неё подключается внешний движок — Algolia или Meilisearch: он ранжирует результаты по релевантности и допускает опечатки.
Драйвер и ключи внешних движков задаются в Админ-панель → Настройки → Сайт → Поиск.
Что ищется
- Посты: заголовок и текст; в результаты попадают только опубликованные и не заблокированные посты
- Пользователи и темы: имя и адрес профиля; в базе данных и в Algolia — также описание
Быстрый поиск ищет только пользователей и темы.
Фильтры постов
- Точное совпадение: во внешних движках ищется фраза целиком; в базе данных заголовок или текст поста должен совпасть с запросом полностью
- Поиск только по заголовкам: совпадение ищется только в заголовке
- Посты редакции: только редакционные материалы
- Дата: последние 24 часа, текущая неделя, текущий месяц, текущий год или всё время
- Сортировка: по релевантности или по дате публикации
Драйверы
- База данных: драйвер по умолчанию, без ключей
- Algolia: Application ID и Admin API Key из раздела API Keys в панели Algolia
- Meilisearch: Host и API Key
При смене драйвера ключи прежнего движка удаляются.
База данных
Результаты не ранжируются по релевантности: посты выводятся от новых к старым, пользователи — по рейтингу за текущий месяц, темы — по активности. Опечатки и словоформы не учитываются.
Algolia и Meilisearch
Внешний движок хранит собственный индекс. Индекс обновляется автоматически при публикации, изменении и удалении контента.
После сохранения ключей индекс синхронизируется в Админ-панель → Настройки → Сайт → Поиск. Для синхронизации должны работать очереди. Синхронизацию повторяют после смены движка или массовых изменений в базе данных.
Meilisearch в Docker
В docker-compose.yml есть сервис Meilisearch для локального окружения. Он запускается с профилем meilisearch:
docker compose --profile meilisearch up -d meilisearchВ настройках поиска указываются Host http://meilisearch:7700 и API Key masterKey. Этот ключ — только для локального окружения; в продакшене используется отдельный экземпляр Meilisearch или Meilisearch Cloud со своим ключом.