Что такое фасетный поиск

Каталог из 50 000 товаров бесполезен без навигации. Пользователь не будет листать страницы — он уйдёт. Фасетный поиск решает эту задачу: позволяет быстро сузить выборку через несколько фильтров одновременно.

Фасет — это один атрибут (бренд, цвет, размер, цена). Их комбинация уточняет выдачу: «кроссовки + Nike + синий + 42 размер + до 10 000 ₽». Каждый шаг фильтрации обновляет список доступных значений других фасетов — показывает только те опции, которые дают непустой результат.

Архитектурные подходы к реализации

Подход Как работает Производительность
Поиск в базе данных (SQL) Запросы с WHERE + COUNT для каждой комбинации Медленно при большом каталоге
Elasticsearch / Solr Инвертированный индекс + aggregations Быстро, масштабируется
Фасетирование в памяти Предвычисленные индексы в Redis / in-memory Очень быстро, требует больше памяти

Для каталогов от 100K+ товаров поисковые движки (Elasticsearch, Typesense, Algolia) — стандарт.

Фасетный поиск и SEO

Каждая комбинация фасетов потенциально создаёт отдельный URL. Каталог с 10 брендами × 8 цветами × 5 ценовых диапазонов = 400 URL только для трёх фасетов. С реальным числом атрибутов — десятки тысяч.

Стратегия управления:

Высоконагруженные (индексировать):
  /catalog/shoes/brand/nike/   — значимый трафик

Комбинации (canonical):
  /catalog/shoes?brand=nike&color=blue → canonical на /catalog/shoes/

Технические (noindex/robots.txt):
  ?sort=price_asc, ?page=2, редкие комбинации

Совет: используйте канонические URL для ключевых фасетов (бренд, категория) и noindex для комбинаций. Это защищает краулинговый бюджет и исключает дублирование контента.

Персонализация фасетов

Стандартный фасетный поиск одинаков для всех. Персонализированный адаптируется под пользователя:

  • Предвыбор значений — пользователь всегда выбирает размер M → система предвыбирает его при входе в категорию
  • Сортировка опций — бренды, которые пользователь покупал, стоят вверху списка
  • Скрытие нерелевантных фасетов — покупателю детской одежды не показывать «мужской / женский» фасет