Разбираемся с фасетными индексами для Умного фильтра — создаём на странице «Фасетные индексы»
Хочу себе такие же кнопкиВведение
Вы уже знакомы с Умным фильтром в Битриксе, но без фасетных индексов он работает медленно и часто «залипает» на больших каталогах. Фасетные индексы позволяют быстро отбирать товары по нескольким атрибутам (цене, бренду, цвету, наличию) без полного перебора базы. В этом уроке вы научитесь создавать страницу «Фасетные индексы», настроить её в админке и понять, как индексы ускоряют поиск.
1. Что такое фасетный индекс?
| Термин | Описание | Пример |
|---|---|---|
| Фасет | Атрибут, по которому можно «разрезать» набор товаров. | Цвет, размер, бренд |
| Индекс | Специальная структура данных, хранящая предрасчитанные связи «товар‑фасет». | Таблица b_catalog_product_facet_index |
| Фасетный индекс | Совокупность индексов по всем выбранным фасетам, позволяющая быстро получить пересечение наборов. | Товары, которые одновременно «красные», «размер M», «в наличии» |
Аналогия: представьте библиотеку, где книги расставлены по полкам (жанр) и полкам по цвету обложки. Если вам нужны только красные книги‑детективы, вы берёте сразу нужные полки, а не листаете каждый том. Фасетный индекс – это карта таких полок.
2. Как работает умный фильтр с фасетными индексами
- Запрос пользователя → набор выбранных фасетов (например,
цвет=красный,бренд=Apple). - Битрикс формирует подзапросы к таблице индексов, получая ID товаров для каждого фасета.
- Пересечение наборов (AND) даёт окончательный список товаров.
- Сортировка и пост‑обработка (цена, наличие) уже работают только с уже отфильтрованным небольшим набором.
Без индексов шаг 2 бы требовал полного сканирования b_catalog_product – O(N) операций. С индексами – O(log N) или даже O(1) для часто используемых фасетов.
3. Подготовка данных
3.1. Выбор фасетов
- Обязательно: атрибуты, которые часто используют покупатели (цена, бренд, цвет, размер).
- Не рекомендуется: атрибуты с слишком большим числом уникальных значений (например, артикул).
3.2. Ожидавать фасетов в инфоблоке
- Откройте Настройки → Список свойств инфоблока.
- Для каждого свойства, которое будет фасетом, включите «Тип свойства – Список» и «Разрешить множественный выбор» (если нужно).
- Установите «Фильтрация – Да».
3.3. Запуск генерации индексов
В админке Битрикса перейдите в «Настройки → Фасетные индексы» и нажмите «Сгенерировать». Система создаст/обновит таблицу b_catalog_facet_index.
Важно: генерация может занять несколько минут на крупном каталоге. Делайте её в ночное время или в режиме «Тихий режим», если включена опция «Обновлять индекс по расписанию».
4. Создание страницы «Фасетные индексы»
4.1. Создание нового компонента
- В «Контент → Страницы» создайте страницу
faset-index.php. - Подключите компонент
bitrix:catalog.filterс параметромUSE_FACET_INDEX = Y.
<?$APPLICATION->IncludeComponent(
"bitrix:catalog.filter",
"smart",
array(
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => 5,
"FILTER_NAME" => "arrFilter",
"USE_FACET_INDEX" => "Y",
"SEF_MODE" => "Y",
"SEF_URL_TEMPLATES" => array(
"smart_filter" => "#SECTION_ID#/filter/#SMART_FILTER_PATH#/apply/",
),
),
false
);?>
4.2. Шаблон вывода
- В папке
components/bitrix/catalog.filter/templates/smart/создайтеtemplate.php. - Добавьте блоки для каждого фасета:
<div class="facet-block">
<h4>Цвет</h4>
<?foreach($arResult["ITEMS"]["COLOR"]["VALUES"] as $value => $item):?>
<label>
<input type="checkbox" name="color[]" value="<?=$value?>" <?=($item["CHECKED"] ? "checked" : "")?>>
<?=$item["NAME"]?> (<?=$item["COUNT"]?>)
</label><br>
<?endforeach;?>
</div>
- COUNT – количество товаров в данном фасете, берётся из индекса, поэтому отображается мгновенно.
4.3. SEO‑дружелюбные URL
С помощью SEF‑режима получаем ссылки вида:
/catalog/phones/filter/color-red/brand-apple/apply/
Эти URL легко индексируются поисковиками и могут быть использованы в рекламных кампаниях.
5. Оптимизация работы фасетных индексов
| Проблема | Причина | Решение |
|---|---|---|
| Медленный отклик | Индекс не обновлялся после массовых импортов | Включить «Обновлять индекс по расписанию» (cron) или вызвать \Bitrix\Catalog\Engine\Index\Facet::rebuild(); вручную |
| Неправильные количества | Свойства с типом «Число» не добавлены в индекс | Перейти в «Настройки → Фасетные индексы», добавить нужные свойства в список «Индексы по числовым полям» |
| Большой объём памяти | Индекс хранит слишком много уникальных значений (например, SKU) | Исключить такие свойства из индекса, использовать обычный фильтр без фасетного ускорения |
| Конфликт с кешем | Кеш страниц не учитывает изменения фасетного индекса | Отключить кеш для страницы «Фасетные индексы» или добавить CACHE_GROUPS => "N" в параметры компонента |
5.1. Тонкая настройка параметров индекса
$facetIndex = new \Bitrix\Catalog\Engine\Index\Facet();
$facetIndex->setCacheTime(3600); // кешировать результаты 1 час
$facetIndex->setMaxFacetValues(200); // ограничить количество значений в фасете
$facetIndex->rebuild(); // пересоздать индекс после изменения настроек
5.2. Мониторинг производительности
- Включите «Отладочный режим» в
bitrix/.settings.php('debug' => true). - Смотрите запросы в
bitrix/admin/diagnostics.php– запросы кb_catalog_facet_indexдолжны быть быстрыми (время < 0,05 сек).
6. Тестирование и проверка корректности
- Откройте страницу «Фасетные индексы» в браузере.
- Выберите несколько фасетов (цвет + бренд).
- Обратите внимание на число товаров рядом с каждым фасетом – оно должно уменьшаться при каждом выборе.
- Откройте инструменты разработчика → Network и найдите запрос к
ajax.php. В параметрахfacet_index=Yбудет видно, что сервер использует таблицуb_catalog_facet_index.
Если количество товаров не меняется, проверьте:
- Правильность ID свойств в шаблоне.
- Наличие
USE_FACET_INDEX = Yв параметрах компонента. - Актуальность индекса (выполните
rebuild).
7. Практика для закрепления
- Создайте фасет «Размер» (S, M, L) в инфоблоке и добавьте его в список индексов. Сгенерируйте индекс и проверьте, что рядом с каждым размером отображается корректное количество товаров.
- Измените шаблон так, чтобы фасет «Цена» выводился в виде ползунка (range). Подключите к нему индексацию по числовому полю и убедитесь, что диапазон работает без полной перезаписи каталога.
- Настройте cron‑задачу для автоматической пересборки индекса каждые 6 часов. Проверьте логи, что задача отрабатывает без ошибок.
- Проведите нагрузочный тест: откройте страницу с 5 одновременно выбранными фасетами (цвет, бренд, размер, материал, наличие). Замерьте время отклика (должно быть < 0,2 сек). Если время больше – оптимизируйте
setMaxFacetValues. - Сравните SEO‑результаты: создайте два URL‑фильтра – один с фасетным индексом, другой без. С помощью Google Search Console проверьте, какой из них индексируется быстрее.
8. Заключение
Фасетные индексы – это «ускоритель» умного фильтра, который превращает громоздкий поиск в мгновенный отклик. Правильная подготовка свойств, генерация индексов и их поддержка в актуальном состоянии позволяют обслуживать каталоги с десятками тысяч товаров без потери производительности. Следуя описанным шагам, вы сможете создать страницу «Фасетные индексы», которая будет работать быстро, стабильно и удобно для ваших покупателей.
Дополнительные ресурсы
- VDSina – подбор серверов для Битрикса – выбирайте мощный VDS с SSD, если ваш каталог превышает 100 000 товаров.
Удачной работы! Если возникнут вопросы, пишите в комментариях – будем разбирать их вместе.
CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса