Покупатель кликает по фильтру «бренд», потом «цвет», потом двигает ползунок цены — и каждый клик отвечает с задержкой в секунду-две. На каталоге в десятки тысяч товаров такой фильтр отпугивает: люди не ждут, они уходят. А ещё фильтр показывает значения, по которым нет ни одного товара, — покупатель выбирает и получает пустую страницу. Оба симптома чаще всего указывают на одно: неправильно настроенный или неактуальный фасетный индекс умного фильтра.
Разберём, что такое фасетный индекс в 1С-Битрикс, как он ускоряет умный фильтр, как настроить участвующие свойства, когда и как запускать переиндексацию и как связать всё это с обменом из 1С. Настройку и ускорение каталога мы ведём в рамках аудита и оптимизации, где заодно приводим в порядок данные и обмен.
Коротко
- Фасетный индекс — готовая таблица «товар — значения свойств», по которой умный фильтр работает мгновенно.
- Без индекса каждый клик по фильтру пересчитывает весь каталог — отсюда тормоза.
- В фильтр включают только свойства, по которым реально фильтруют; каждое лишнее раздувает индекс.
- После массовых изменений и обмена с 1С индекс переиндексируют, иначе фильтр покажет неверные счётчики.
Проблема: почему фильтр тормозит
Умный фильтр — одна из самых нагруженных частей каталога. Когда покупатель выбирает условия, система должна ответить на два вопроса: какие товары подходят и какие значения свойств ещё доступны (чтобы не показывать пустые). На большом каталоге честный расчёт этого «на лету» — тяжёлая операция: нужно перебрать все товары и все их свойства при каждом клике.
Если фильтр считает так на каждый запрос, страница тормозит, база нагружается, а при пиковой посещаемости всё это складывается в заметные задержки. Фасетный индекс решает проблему в корне: тяжёлый расчёт делается заранее и один раз, а во время работы фильтр просто читает готовые данные.
Что такое фасетный индекс
Фасет (грань) — это одно значение свойства в фильтре: «бренд = X», «цвет = красный», «цена от 1000 до 2000». Фасетный индекс — это заранее построенная структура, которая хранит соответствия между товарами и значениями их свойств в форме, удобной для быстрого счёта. По сути, это ответ на вопрос «какие товары попадают в каждую грань» и «сколько их», подготовленный до того, как покупатель что-то нажал.
Благодаря индексу умный фильтр (компонент catalog.smart.filter) мгновенно показывает счётчики у каждого значения и убирает те, под которые нет товаров с учётом уже выбранных условий. Это и есть «умность» фильтра: он динамически показывает только достижимые комбинации — но быстро это возможно только за счёт индекса.
Как индекс ускоряет умный фильтр
Разница между работой с индексом и без него — принципиальная.
| Аспект | Без фасетного индекса | С фасетным индексом |
|---|---|---|
| Что происходит на клик | Пересчёт по всему каталогу | Чтение готовых данных |
| Скорость на большом каталоге | Медленно, задержки | Мгновенно |
| Нагрузка на базу | Высокая при каждом запросе | Низкая |
| Счётчики и пустые значения | Считать дорого | Готовы заранее |
| Когда тяжёлая работа | Постоянно, на каждом клике | Один раз при индексации |
Идея та же, что у кэша: перенести дорогую работу с момента запроса на момент подготовки. Индекс строится при изменении товаров и при переиндексации, а покупатель получает быстрый отклик. Цена — необходимость поддерживать индекс в актуальном состоянии, о чём и пойдёт речь дальше.
Фасетный индекс против индексов базы
Частая путаница — считать фасетный индекс «обычным индексом MySQL». Это не так. Обычные индексы базы ускоряют выборку по конкретным столбцам таблиц. Фасетный индекс — специализированная надстройка модуля каталога Битрикса именно под задачу умного фильтра: он хранит соответствия товаров и значений свойств так, чтобы быстро считать количество товаров в каждой грани и учитывать уже выбранные условия.
Оба типа индексов важны и работают вместе: индексы базы ускоряют общие выборки товаров и сортировку, а фасетный индекс — конкретно фильтр. Понимание разницы помогает не искать причину медленного фильтра в «неправильных индексах таблиц»: если тормозит именно фильтр со счётчиками, копать надо в сторону фасетного индекса и его актуальности. Про то, как в целом устроена работа с данными в современном ядре, мы писали в статье о D7 ORM в 1С-Битрикс.
Настройка свойств для фильтра
Фасетный индекс строится по свойствам, которые участвуют в умном фильтре. Поэтому первый шаг — правильно настроить эти свойства. У каждого свойства инфоблока есть параметр участия в умном фильтре, где задаётся:
- Участвует ли свойство в фильтре. Только помеченные свойства попадают в индекс и в интерфейс фильтра.
- Вид отображения. Флажки, выпадающий список, интервал (для цены и числовых), размеры/цвета с картинками.
- Порядок и группировка. Как свойство показывается в панели фильтра.
Ключевое правило — включать в фильтр только те характеристики, по которым покупатели реально фильтруют. Соблазн «добавить все свойства» вредит: раздутый фильтр загромождает интерфейс и раздувает индекс, замедляя переиндексацию. Меньше, но осмысленных граней — практичнее, чем десятки редко используемых.
Включение и построение индекса
После того как свойства настроены на участие в фильтре, фасетный индекс включают и строят для инфоблока. Общая логика такая:
- Включите фасетный индекс. В настройках каталога/инфоблока активируйте использование фасетного индекса для умного фильтра.
- Проверьте состав свойств. Убедитесь, что в фильтре участвуют нужные свойства и цена.
- Запустите построение. Полная индексация проходит по всем товарам и формирует индекс — на большом каталоге это занимает время.
- Проверьте фильтр. Счётчики у значений корректны, пустые значения скрываются, отклик быстрый.
После первичного построения индекс дальше поддерживается: при сохранении отдельного товара его данные в индексе обновляются автоматически. Ручная переиндексация нужна для случаев, когда автоматического обновления недостаточно, — о них ниже.
Когда нужна переиндексация
Фасетный индекс — это снимок соответствий на момент построения. Пока изменения точечные, индекс подхватывает их сам. Но есть ситуации, когда нужна полная переиндексация:
- Изменили структуру фильтра. Добавили, убрали или перенастроили свойства, участвующие в умном фильтре.
- Массово загрузили товары. Импорт, обмен с 1С, пакетное изменение свойств — индекс мог не обновиться по всем позициям.
- Изменили значения свойств у многих товаров. Массовая правка характеристик, по которым идёт фильтрация.
- Фильтр показывает неверные данные. Недоступные значения, неправильные счётчики — признак рассинхрона индекса.
Главный симптом устаревшего индекса — фильтр показывает значения, под которые нет товаров, или неверно считает количество. Если пользователь выбирает грань и получает пустую выдачу, почти наверняка индекс не переиндексирован после массовых изменений.
Переиндексация пошагово
Полная переиндексация фасетного индекса запускается из административной части каталога. Порядок действий:
- Откройте настройки фасетного индекса. В разделе каталога/инфоблока найдите управление фасетным индексом.
- Запустите полную переиндексацию. Процесс проходит по всем товарам и пересобирает индекс с нуля.
- Дождитесь завершения. На большом каталоге это может занять заметное время; лучше делать в период низкой нагрузки.
- Проверьте результат. Счётчики фильтра корректны, недоступные значения исчезли, отклик быстрый.
- Автоматизируйте под обмен. Если товары регулярно приходят из 1С, настройте переиндексацию агентом после обмена.
На больших каталогах полная переиндексация — тяжёлая операция, поэтому её планируют на время минимальной посещаемости и не запускают вручную «на всякий случай» посреди рабочего дня. Для регулярных обменов её лучше автоматизировать, а не делать руками.
Индекс и обмен с 1С
Обмен с 1С — главный источник массовых изменений в каталоге: приходят новые товары, обновляются свойства, цены и остатки. Именно после обмена фасетный индекс чаще всего оказывается неактуальным, если о переиндексации не позаботились.
Правильная практика — связать обмен и переиндексацию: после завершения крупного импорта из 1С автоматически запускать обновление фасетного индекса (например, агентом по расписанию или по факту завершения обмена). Тогда фильтр всегда работает по свежим данным, а покупатель не натыкается на «пустые» значения после ночного обмена. Настройку этой связки мы закрываем услугой автоматизации продаж и склада на 1С, где обмен и индексация работают согласованно.
Производительность и размер индекса
Размер и скорость построения фасетного индекса напрямую зависят от числа свойств в фильтре и объёма каталога. Несколько принципов, чтобы держать всё под контролем:
- Минимум свойств в фильтре. Только то, по чему реально фильтруют, — каждое лишнее свойство раздувает индекс и удлиняет переиндексацию.
- Переиндексация в непиковое время. Тяжёлую полную индексацию планируют на ночь или период низкой нагрузки.
- Откладывание обновления при импорте. При массовой загрузке иногда выгоднее не обновлять индекс на каждый товар, а один раз переиндексировать после.
- Достаточные ресурсы сервера. Индексация нагружает базу и процессор — важна нормальная инфраструктура.
Скорость фильтра — это связка настроенного индекса и здорового окружения: кэш, ресурсы, композитный сайт. Общую основу производительности для Битрикса мы разбирали в статье про хостинг и инфраструктуру на BitrixVM — без неё даже идеальный индекс не спасёт медленный сервер.
Частые ошибки
- Фасетный индекс не включён. Фильтр считает всё на лету и тормозит на большом каталоге.
- Нет переиндексации после обмена. Фильтр показывает недоступные значения и неверные счётчики.
- В фильтр включили все свойства. Индекс раздут, переиндексация долгая, интерфейс перегружен.
- Переиндексация в пик. Тяжёлую операцию запускают в рабочее время и роняют скорость сайта.
- Обновление индекса на каждый товар при импорте. Массовая загрузка тормозит из-за поэлементного обновления индекса.
- Причину тормозов ищут не там. Медленный фильтр объясняют «плохими индексами таблиц» вместо неактуального фасетного индекса.
- Индексация без ресурсов. Слабый сервер не тянет построение индекса на большом каталоге.
Чек-лист настройки
- Свойства фильтра настроены. В умном фильтре участвуют только те характеристики, по которым реально фильтруют.
- Фасетный индекс включён. Для инфоблока активировано использование фасетного индекса.
- Индекс построен. Проведена полная первичная индексация, фильтр отвечает быстро.
- Счётчики корректны. Значения без товаров скрываются, количество верное.
- Переиндексация после изменений. После правки структуры фильтра и массовых загрузок запускается полная переиндексация.
- Связка с обменом настроена. После обмена с 1С индекс обновляется автоматически.
- Тяжёлые операции в непик. Полная переиндексация планируется на низкую нагрузку.
- Ресурсы достаточны. Сервер тянет построение индекса без деградации сайта.
Вывод
Фасетный индекс — это то, что превращает умный фильтр из тормозящего в мгновенный. Он переносит тяжёлый расчёт «какие товары и сколько подходят под каждую грань» с момента клика на момент индексации, поэтому покупатель получает быстрый отклик и корректные счётчики. Без индекса большой каталог с фильтром обречён на задержки.
Держите в фильтре только нужные свойства, стройте индекс, а после массовых изменений и обмена с 1С обязательно переиндексируйте — вручную или автоматически агентом. Свяжите обмен и переиндексацию, планируйте тяжёлые операции на непиковое время, дайте серверу ресурсы — и умный фильтр станет быстрым и точным помощником покупателя, а не источником пустых страниц и тормозов.