-10%Переходите к нам от другого подрядчика — дадим скидку на первый этап работ

Фасетный индекс умного фильтра: настройка и переиндексация

Фасетный индекс умного фильтра в 1С-Битрикс: настройка свойств и переиндексация

Покупатель кликает по фильтру «бренд», потом «цвет», потом двигает ползунок цены — и каждый клик отвечает с задержкой в секунду-две. На каталоге в десятки тысяч товаров такой фильтр отпугивает: люди не ждут, они уходят. А ещё фильтр показывает значения, по которым нет ни одного товара, — покупатель выбирает и получает пустую страницу. Оба симптома чаще всего указывают на одно: неправильно настроенный или неактуальный фасетный индекс умного фильтра.

Разберём, что такое фасетный индекс в 1С-Битрикс, как он ускоряет умный фильтр, как настроить участвующие свойства, когда и как запускать переиндексацию и как связать всё это с обменом из 1С. Настройку и ускорение каталога мы ведём в рамках аудита и оптимизации, где заодно приводим в порядок данные и обмен.

Коротко

  • Фасетный индекс — готовая таблица «товар — значения свойств», по которой умный фильтр работает мгновенно.
  • Без индекса каждый клик по фильтру пересчитывает весь каталог — отсюда тормоза.
  • В фильтр включают только свойства, по которым реально фильтруют; каждое лишнее раздувает индекс.
  • После массовых изменений и обмена с 1С индекс переиндексируют, иначе фильтр покажет неверные счётчики.

Проблема: почему фильтр тормозит

Умный фильтр — одна из самых нагруженных частей каталога. Когда покупатель выбирает условия, система должна ответить на два вопроса: какие товары подходят и какие значения свойств ещё доступны (чтобы не показывать пустые). На большом каталоге честный расчёт этого «на лету» — тяжёлая операция: нужно перебрать все товары и все их свойства при каждом клике.

Если фильтр считает так на каждый запрос, страница тормозит, база нагружается, а при пиковой посещаемости всё это складывается в заметные задержки. Фасетный индекс решает проблему в корне: тяжёлый расчёт делается заранее и один раз, а во время работы фильтр просто читает готовые данные.

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

Фасет (грань) — это одно значение свойства в фильтре: «бренд = X», «цвет = красный», «цена от 1000 до 2000». Фасетный индекс — это заранее построенная структура, которая хранит соответствия между товарами и значениями их свойств в форме, удобной для быстрого счёта. По сути, это ответ на вопрос «какие товары попадают в каждую грань» и «сколько их», подготовленный до того, как покупатель что-то нажал.

Благодаря индексу умный фильтр (компонент catalog.smart.filter) мгновенно показывает счётчики у каждого значения и убирает те, под которые нет товаров с учётом уже выбранных условий. Это и есть «умность» фильтра: он динамически показывает только достижимые комбинации — но быстро это возможно только за счёт индекса.

Умный (фасетный) фильтр каталога Свойствацвет, размер, брендФасетный индекспредрасчётФильтрвыбор значенийВыдачатовары мгновенно
Схема: значения свойств заранее собираются в фасетный индекс, поэтому фильтр отдаёт подходящие товары мгновенно — без тяжёлых запросов к базе на каждый клик.

Как индекс ускоряет умный фильтр

Разница между работой с индексом и без него — принципиальная.

АспектБез фасетного индексаС фасетным индексом
Что происходит на кликПересчёт по всему каталогуЧтение готовых данных
Скорость на большом каталогеМедленно, задержкиМгновенно
Нагрузка на базуВысокая при каждом запросеНизкая
Счётчики и пустые значенияСчитать дорогоГотовы заранее
Когда тяжёлая работаПостоянно, на каждом кликеОдин раз при индексации

Идея та же, что у кэша: перенести дорогую работу с момента запроса на момент подготовки. Индекс строится при изменении товаров и при переиндексации, а покупатель получает быстрый отклик. Цена — необходимость поддерживать индекс в актуальном состоянии, о чём и пойдёт речь дальше.

Фасетный индекс против индексов базы

Частая путаница — считать фасетный индекс «обычным индексом MySQL». Это не так. Обычные индексы базы ускоряют выборку по конкретным столбцам таблиц. Фасетный индекс — специализированная надстройка модуля каталога Битрикса именно под задачу умного фильтра: он хранит соответствия товаров и значений свойств так, чтобы быстро считать количество товаров в каждой грани и учитывать уже выбранные условия.

Оба типа индексов важны и работают вместе: индексы базы ускоряют общие выборки товаров и сортировку, а фасетный индекс — конкретно фильтр. Понимание разницы помогает не искать причину медленного фильтра в «неправильных индексах таблиц»: если тормозит именно фильтр со счётчиками, копать надо в сторону фасетного индекса и его актуальности. Про то, как в целом устроена работа с данными в современном ядре, мы писали в статье о D7 ORM в 1С-Битрикс.

Настройка свойств для фильтра

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

Ключевое правило — включать в фильтр только те характеристики, по которым покупатели реально фильтруют. Соблазн «добавить все свойства» вредит: раздутый фильтр загромождает интерфейс и раздувает индекс, замедляя переиндексацию. Меньше, но осмысленных граней — практичнее, чем десятки редко используемых.

Включение и построение индекса

После того как свойства настроены на участие в фильтре, фасетный индекс включают и строят для инфоблока. Общая логика такая:

  1. Включите фасетный индекс. В настройках каталога/инфоблока активируйте использование фасетного индекса для умного фильтра.
  2. Проверьте состав свойств. Убедитесь, что в фильтре участвуют нужные свойства и цена.
  3. Запустите построение. Полная индексация проходит по всем товарам и формирует индекс — на большом каталоге это занимает время.
  4. Проверьте фильтр. Счётчики у значений корректны, пустые значения скрываются, отклик быстрый.

После первичного построения индекс дальше поддерживается: при сохранении отдельного товара его данные в индексе обновляются автоматически. Ручная переиндексация нужна для случаев, когда автоматического обновления недостаточно, — о них ниже.

Когда нужна переиндексация

Фасетный индекс — это снимок соответствий на момент построения. Пока изменения точечные, индекс подхватывает их сам. Но есть ситуации, когда нужна полная переиндексация:

Главный симптом устаревшего индекса — фильтр показывает значения, под которые нет товаров, или неверно считает количество. Если пользователь выбирает грань и получает пустую выдачу, почти наверняка индекс не переиндексирован после массовых изменений.

Запомните связку: любое массовое изменение товаров или структуры фильтра = запуск переиндексации. Точечные правки индекс подхватит сам, а массовые — почти всегда требуют полной переиндексации.

Переиндексация пошагово

Полная переиндексация фасетного индекса запускается из административной части каталога. Порядок действий:

  1. Откройте настройки фасетного индекса. В разделе каталога/инфоблока найдите управление фасетным индексом.
  2. Запустите полную переиндексацию. Процесс проходит по всем товарам и пересобирает индекс с нуля.
  3. Дождитесь завершения. На большом каталоге это может занять заметное время; лучше делать в период низкой нагрузки.
  4. Проверьте результат. Счётчики фильтра корректны, недоступные значения исчезли, отклик быстрый.
  5. Автоматизируйте под обмен. Если товары регулярно приходят из 1С, настройте переиндексацию агентом после обмена.

На больших каталогах полная переиндексация — тяжёлая операция, поэтому её планируют на время минимальной посещаемости и не запускают вручную «на всякий случай» посреди рабочего дня. Для регулярных обменов её лучше автоматизировать, а не делать руками.

Индекс и обмен с 1С

Обмен с 1С — главный источник массовых изменений в каталоге: приходят новые товары, обновляются свойства, цены и остатки. Именно после обмена фасетный индекс чаще всего оказывается неактуальным, если о переиндексации не позаботились.

Правильная практика — связать обмен и переиндексацию: после завершения крупного импорта из 1С автоматически запускать обновление фасетного индекса (например, агентом по расписанию или по факту завершения обмена). Тогда фильтр всегда работает по свежим данным, а покупатель не натыкается на «пустые» значения после ночного обмена. Настройку этой связки мы закрываем услугой автоматизации продаж и склада на 1С, где обмен и индексация работают согласованно.

Производительность и размер индекса

Размер и скорость построения фасетного индекса напрямую зависят от числа свойств в фильтре и объёма каталога. Несколько принципов, чтобы держать всё под контролем:

Скорость фильтра — это связка настроенного индекса и здорового окружения: кэш, ресурсы, композитный сайт. Общую основу производительности для Битрикса мы разбирали в статье про хостинг и инфраструктуру на BitrixVM — без неё даже идеальный индекс не спасёт медленный сервер.

Частые ошибки

Чек-лист настройки

  1. Свойства фильтра настроены. В умном фильтре участвуют только те характеристики, по которым реально фильтруют.
  2. Фасетный индекс включён. Для инфоблока активировано использование фасетного индекса.
  3. Индекс построен. Проведена полная первичная индексация, фильтр отвечает быстро.
  4. Счётчики корректны. Значения без товаров скрываются, количество верное.
  5. Переиндексация после изменений. После правки структуры фильтра и массовых загрузок запускается полная переиндексация.
  6. Связка с обменом настроена. После обмена с 1С индекс обновляется автоматически.
  7. Тяжёлые операции в непик. Полная переиндексация планируется на низкую нагрузку.
  8. Ресурсы достаточны. Сервер тянет построение индекса без деградации сайта.

Вывод

Фасетный индекс — это то, что превращает умный фильтр из тормозящего в мгновенный. Он переносит тяжёлый расчёт «какие товары и сколько подходят под каждую грань» с момента клика на момент индексации, поэтому покупатель получает быстрый отклик и корректные счётчики. Без индекса большой каталог с фильтром обречён на задержки.

Держите в фильтре только нужные свойства, стройте индекс, а после массовых изменений и обмена с 1С обязательно переиндексируйте — вручную или автоматически агентом. Свяжите обмен и переиндексацию, планируйте тяжёлые операции на непиковое время, дайте серверу ресурсы — и умный фильтр станет быстрым и точным помощником покупателя, а не источником пустых страниц и тормозов.

Частые вопросы

Что такое фасетный индекс в умном фильтре 1С-Битрикс?

Фасетный индекс — это заранее подготовленная таблица соответствий «товар — значения свойств», по которой умный фильтр (catalog.smart.filter) мгновенно понимает, сколько товаров подходит под каждую комбинацию условий и какие значения ещё доступны. Без него фильтр вынужден на каждый запрос пересчитывать выборку по всему каталогу, что медленно. Фасетный индекс превращает тяжёлый расчёт в быстрое чтение готовых данных.

Чем фасетный индекс отличается от обычных индексов базы?

Обычные индексы MySQL ускоряют выборку по отдельным полям. Фасетный индекс Битрикса — это специализированная структура именно под задачу фильтра: он хранит, какие товары каким значениям свойств соответствуют, и позволяет быстро считать количество товаров в каждой грани фильтра (фасете) и отсекать пустые значения. Это надстройка модуля каталога, а не просто индекс на столбце таблицы.

Когда нужно запускать переиндексацию фасетного индекса?

Переиндексация нужна после структурных изменений: когда вы добавили или изменили свойства, участвующие в фильтре, поменяли их настройки участия в умном фильтре, массово загрузили или изменили товары. Точечные изменения отдельных товаров индекс обычно подхватывает автоматически при сохранении, но после массовых операций и правок структуры фильтра полную переиндексацию запускают вручную, иначе фильтр покажет неверные счётчики и значения.

Где включается участие свойства в умном фильтре?

В настройках свойства инфоблока есть параметр участия в умном фильтре — там задаётся, показывать ли свойство в фильтре и в каком виде (флажки, выпадающий список, интервал цен, размеры). Только помеченные свойства попадают в фасетный индекс и в фильтр. Если свойство не участвует в фильтре, добавлять его в индекс бессмысленно — важно включать в фильтр только то, по чему покупатели реально фильтруют.

Почему после изменения товаров фильтр показывает неверные данные?

Скорее всего, фасетный индекс не переиндексирован после массовых изменений. Индекс — это снимок соответствий на момент построения; если товары изменились массово (например, обменом из 1С), а индекс не обновился, фильтр считает по устаревшим данным: показывает недоступные значения или неверные счётчики. Решение — запустить переиндексацию, а для регулярных обменов настроить её автоматическое обновление.

Замедляет ли фасетный индекс сохранение товаров?

Немного — при сохранении товара индекс обновляется для этого элемента, что добавляет небольшую нагрузку. Но это несопоставимо с выигрышем на стороне покупателя: без индекса каждый клик по фильтру пересчитывал бы весь каталог. При массовых загрузках, чтобы не тормозить импорт, автоматическое обновление индекса иногда временно откладывают и запускают полную переиндексацию один раз после загрузки — это быстрее, чем обновлять индекс на каждый товар в цикле.

Влияет ли число свойств в фильтре на размер и скорость индекса?

Да. Каждое свойство, участвующее в умном фильтре, увеличивает объём фасетного индекса и время его построения. Поэтому в фильтр включают только те характеристики, по которым покупатели реально фильтруют, а не все свойства подряд. Раздутый фильтр с десятками редко используемых свойств замедляет переиндексацию и загромождает интерфейс, не давая пользы. Меньше, но осмысленных граней — лучше.

Как переиндексация связана с обменом с 1С?

Обмен с 1С массово меняет товары: приходят новые позиции, обновляются свойства, цены и остатки. После крупного обмена фасетный индекс нужно обновить, иначе фильтр будет работать по устаревшим данным. На практике переиндексацию либо запускают агентом после обмена, либо настраивают так, чтобы индекс корректно обновлялся по итогам импорта. Связка «обмен плюс переиндексация» — обязательная часть настройки каталога, который часто обновляется из 1С.

Поделиться:

Умный фильтр тормозит или показывает пустые значения?

Настроим свойства и фасетный индекс, автоматизируем переиндексацию под обмен с 1С и ускорим каталог. Рассчитаем работу по вашему проекту.

Аудит и оптимизация 1С

Игорь Воскресенский

Команда B2Bsite. С 2014 года разрабатываем интернет-магазины на 1С-Битрикс: умный фильтр, фасетный индекс, производительность каталога и обмен с 1С под нагрузкой.

← Все статьи блога