
Редакция Romanov Lab · Опубликовано
Умный фильтр может выглядеть исправно и при этом выбирать неправильные товары. Галочки меняются, счётчик работает, но в выдаче остаются позиции без подходящего варианта или исчезает нужный размер. Проверка должна охватывать три слоя: исходные данные, правила отбора и обновление результата. Настройку индекса имеет смысл начинать после того, как определено, какой ответ считается правильным.
Определите смысл каждого фильтра
Для свойства запишите, к чему оно относится: модели товара или отдельному торговому предложению. Бренд обычно характеризует модель, размер может принадлежать варианту. Цена и доступность зависят ещё и от пользовательских условий. Если эти уровни смешать, интерфейс начнёт предлагать комбинации, которые нельзя купить.
В официальном описании фасетного поиска объясняется сочетание значений: внутри одного фильтра выбираются подходящие альтернативы, а условия разных фильтров применяются совместно. При проектировании всё равно нужны собственные контрольные примеры, особенно для предложений и дополнительных ограничений каталога.
Составьте небольшой словарь: название в интерфейсе, код свойства, тип, единица измерения, источник данных и допустимые значения. Числовой диапазон требует согласованных единиц. Отдельные значения «сталь», «Сталь» и «нерж.» нужно сначала осмыслить и нормализовать, а не скрывать различия красивыми подписями в шаблоне.
Постройте контрольный каталог вручную
Возьмём учебный набор из трёх моделей курток. У модели А есть красная M и синяя L. У модели Б есть красная L. У модели В есть красная L, но она недоступна для покупки по согласованному правилу магазина. Для запроса «красная, размер L, доступна к покупке» ожидается только модель Б.
Этот пример проверяет важное условие: нужные цвет и размер должны сочетаться в одном продаваемом варианте. Наличие красного предложения и предложения L у одного родителя ещё не доказывает, что существует красная L. Запишите такое ожидание в требования и проверьте фактическую работу выбранной версии компонента и его доработок.
Добавьте случаи с незаполненным свойством, двумя одинаковыми значениями, товаром из соседнего раздела и отдельной ценой для дилера. Для каждого запроса заранее выпишите допустимые идентификаторы результата. Ожидаемый ответ не стоит получать тем же компонентом, который вы проверяете: иначе ошибка станет собственным эталоном.
Проверьте соединение фильтра со списком
Компонент catalog.smart.filter подготавливает условия, а вывод каталога должен их использовать. По документации компонента фильтр подключается раньше списка. Проверьте совпадение источника, раздела и имени выходного массива FILTER_NAME. Параметр PREFILTER_NAME предназначен для дополнительных входных ограничений.
Практический симптом неправильной связи: счётчик рядом с кнопкой меняется, но после применения остаётся прежний список. В таком случае не начинайте с пересоздания всех индексов. Зафиксируйте применённые условия и убедитесь, что компонент списка действительно получил их. На странице с несколькими каталогами важно также исключить случайное использование одной переменной для разных наборов.
Дополнительные ограничения должны согласовываться. Если страница показывает только акционный ассортимент, фильтр не должен считать весь каталог. Аналогично проверяют раздел, подкатегории, активность и доступность. В пользовательском шаблоне отдельно исследуют, не удаляется ли часть карточек уже после выборки: тогда счётчик и видимый результат закономерно разойдутся.
Что проверять в фасетном индексе
Фасетный индекс хранит подготовленные сведения для отбора и помогает не пересчитывать всё с нуля при каждом запросе. Страница управления находится в разделе «Контент → Инфоблоки → Фасетные индексы». Для создания требуется торговый каталог с хотя бы одним свойством, включённым в умный фильтр. Условия и состояния перечислены в справке по фасетным индексам.
Создавайте или перестраивайте индекс на согласованном каталоге и проверяйте завершение операции. Для большой базы заранее оцените длительность на копии и выберите окно с меньшей нагрузкой. Статус готовности необходим, но не заменяет контрольную выборку: индекс может корректно отражать неверные исходные значения.
После изменения состава свойств фильтра и структурных операций сверяйтесь с правилами перестроения в официальном курсе. Обычное изменение товара и добавление нового свойства при импорте имеют разные последствия. Если данные записывает собственная интеграция, разработчик должен отдельно проверить, что используемый способ обновления поддерживает актуальность индекса. Прямая запись в таблицы без полного понимания механизма опасна.
Локализуйте ошибку по наблюдаемому симптому
- Свойство отсутствует в форме. Проверьте правильный инфоблок, включение свойства в фильтр, значения в текущем ассортименте и пользовательский шаблон.
- Значение есть, но нужный товар не находится. Сравните сохранённое значение, уровень «товар или предложение», текущий раздел, доступность и дополнительные ограничения.
- Счётчик расходится со списком. Проверьте одну и ту же область отбора, единицу подсчёта и условия обоих компонентов.
- После импорта результат устарел. Сопоставьте данные карточки, состояние индекса и кэш конкретного результата.
- Ошибка только после нескольких быстрых действий. Проверьте порядок фоновых ответов и обновление интерфейса.
Для каждого случая меняйте один слой и повторяйте тот же запрос. Очистка всего кэша и пересоздание индекса одновременно могут временно убрать симптом, но не покажут причину. Сохраните исходные настройки и результаты, чтобы понять, какая операция действительно повлияла на отбор.
Не смешивайте индекс, кэш и адрес страницы
Индекс описывает данные для поиска; кэш хранит готовый результат вычисления; URL передаёт выбранное состояние. Исправление одного слоя не обязано обновить остальные. Если при чистом открытии фильтр работает, а после возврата назад показывает старое состояние, сначала проверяйте восстановление выбора и сетевые запросы.
На тестовой копии откройте одинаковый запрос из адресной строки, через форму и после перехода назад. Сравните выбранные значения, счётчик и идентификаторы карточек. Затем измените контрольное свойство у товара и повторите маршрут после предусмотренного обновления данных. Это показывает, где возникло устаревшее состояние.
Если используются асинхронные запросы, испытайте быстрое изменение нескольких параметров. Старый ответ не должен заменить более новый выбор. Визуальная блокировка кнопки не всегда решает гонку; критерий приёмки состоит в соответствии последнего выбранного состояния показанным товарам.
Приёмка перед подключением большого каталога
- Каждая проверочная комбинация возвращает заранее известный набор товаров.
- Свойства предложений соответствуют реально существующим сочетаниям.
- Недоступность и права на цены одинаково учтены в фильтре, списке и карточке.
- Добавление и изменение товара отражаются после штатного обновления.
- Новый набор свойств проходит проверку индекса и повторный прогон.
- Применение, сброс, прямая ссылка и история браузера показывают согласованное состояние.
- На рабочем объёме измерены время ответа и нагрузка без отключения нужных ограничений.
После этого можно обсуждать удобство расположения полей и поисковую видимость адресов фильтра. Техническая корректность отбора решается отдельно от того, какие комбинации стоит индексировать поисковым системам. Сначала покупатель должен получать товары, действительно отвечающие его выбору.
Нужен план для вашего проекта? Напишите нам в Telegram или по электронной почте. Обсудим разработку, продвижение или поддержку сайта.


