Поиск
JournalPHP реализует полнотекстовый поиск через Laravel Scout.
Как работает поиск
Поиск использует Laravel Scout. Драйвер задаётся переменной SCOUT_DRIVER в .env:
| Драйвер | Когда использовать |
|---|---|
null | Значение в .env.example — поиск отключён до настройки |
database | MySQL FULLTEXT без внешних сервисов (рекомендуется для self-hosted) |
algolia / meilisearch | Внешний поисковый движок |
В config/scout.php fallback по умолчанию — algolia, если переменная не задана.
Scout индексирует только две модели: Post и User. Поиск сообществ и тегов выполняется отдельно, вне Scout.
Что индексируется
| Модель | Индексируемые поля |
|---|---|
Post | title, blocks |
User | name |
Поиск по тегам
Теги не входят в Scout-индекс. Поиск и навигация по тегам — через отдельные маршруты:
- Страница тега:
/tag/{slug} - Популярные теги:
/tags/popular
Управление тегами — Admin Panel → Теги (/admin-panel/tags).
Переиндексация
При необходимости пересобрать поисковый индекс:
bash
# Переиндексировать посты
docker compose exec app php artisan scout:import "App\Models\Post"
# Переиндексировать пользователей
docker compose exec app php artisan scout:import "App\Models\User"
# Очистить индекс
docker compose exec app php artisan scout:flush "App\Models\Post"Страница поиска
Поиск и рекомендации: /discovery
| URL | Контент |
|---|---|
/discovery | Поиск постов, пользователей и сообществ |
/discovery/blogs | Топ блогов и авторов |
/discovery/topics | Список сообществ |
/tag/{name} | Посты по тегу |
Теги как навигация
Теги — дополнительный механизм обнаружения контента. Каждый тег имеет свою страницу (/tag/{slug}) и включается в sitemap.xml для SEO.