Умный фильтр и фасетный индекс
Компонент catalog.smart.filter опирается на фасетный индекс инфоблока (таблица b_iblock_N_index), позволяющий быстро рассчитывать доступные комбинации фильтров без сложных JOIN-запросов к свойствам. При невалидности фасетного индекса или изменении элементов через ORM без обновления фасетов компонент переходит на прямой перебор базы, что резко замедляет генерацию каталога.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Компонент catalog.smart.filter
-
2
Фасетный индекс и его пересчёт
-
3
Свойства в фильтре и производительность
-
4
Ограничения фасетов
Материалы
Официальная документация
-
Фасетный поиск: улучшаем работу каталога товаров Старая дока
Проверь себя
Заказчик добавил свойство в умный фильтр, и страница каталога стала открываться пять секунд вместо одной. Где искать причину?
В состоянии фасетного индекса. Новое свойство в фильтре требует пересоздать индекс; пока он невалиден, индексная таблица не используется, и подсчёт вариантов в catalog.smart.filter идёт обычными запросами по значениям свойств. Пересоздайте индекс в настройках инфоблока.
Чем фасетный индекс отличается от обычного индекса MySQL на таблице свойств?
Это денормализованная таблица b_iblock_N_index: одна строка на элемент, раздел (включая родительские) и значение свойства или цены, строковые значения вынесены в словарь. Фильтр и подсчёт вариантов идут по одной таблице вместо соединений со значениями свойств.
После импорта через ORM новые товары не видны в фильтре, хотя в разделе есть. Почему?
ORM инфоблоков не обновляет фасетный индекс. Классический CIBlockElement::Add() вызывает обновление сам, а после save() нужно вызвать PropertyIndex Manager::updateElementIndex() для каждого элемента.
Почему в фильтр не стоит выносить свойство «Артикул» или любое другое с уникальными значениями?
Каждое уникальное строковое значение попадает в словарь и в индекс как отдельная фасета; компонент строит по нему список вариантов на каждой странице раздела. Индекс раздувается, список бесполезен для пользователя, а разбор комбинаций в компоненте дорожает.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить