Умные фильтры
для e-commerce
для e-commerce
Почему даже при разработке на Битрикс мы предпочитаем делать фильтры на ElasticSearch
Когда в интернет-магазине больше десятка товаров, уже хочется помочь пользователю с выбором. А если товаров больше сотни, а тем более несколько тысяч, — фильтр становится необходим.
Маркетплейсы пользователей избаловали, так что в минимальной комплектации они ожидают от фильтра в любом интернет-магазине:
- свой набор критериев фильтрации для каждой категории каталога, причем критериев релевантных;
- возможность отфильтровать список товаров по наличию (как в целом в магазине, так и на определенном складе, откуда привезут быстрее);
- возможность выбрать только акционные товары (все любят экономить);
- фильтрацию по тегам. Когда можно посмотреть товары, заранее отмеченные продавцом, как носители определенного свойства. Например, видеть только веганские продукты в каталоге доставке;
- возможность фильтровать товары не только в категориях каталога, но и на "сборных" страницах, где представлены товары сразу из многих категорий. Например, в результатах поиска, на странице бренда, в акционной подборке;
- возможность фильтровать по цене уже с учетом скидок (правда с этим и не все маркетплейсы сейчас справляются).
Получается, фильтр при разработке надо сразу планировать умный и гибкий.
Умный фильтр на сайте: какие есть варианты?
В наших проектах мы используем два варианта реализации гибкого фильтра:
1
Можно реализовать фильтр как микросервис, интегрировавшись с ElasticSearch — популярной готовой поисковой системой. Необходимо установить ее на ваш сервер и научить сайт с ней взаимодействовать. Подходит для любых проектов — хоть на фреймворках, хоть на Битриксе.
Elasticsearch развивает open-source решение, но для коммерческого использования в enterprise-среде применяется серверная публичная лицензия «SSPL (Server Side Public License). Для стандартных интернет-магазинов это означает, что покупать систему отдельно не нужно — достаточно развернуть и настроить её на вашем сервере (силами квалифицированных разработчиков).
Так мы делали для сети аптек Амурфармация, для сети кожгалантереи Империя сумок, для дистрибьютора оборудования IPС2U и на многих других проектах.
Elasticsearch развивает open-source решение, но для коммерческого использования в enterprise-среде применяется серверная публичная лицензия «SSPL (Server Side Public License). Для стандартных интернет-магазинов это означает, что покупать систему отдельно не нужно — достаточно развернуть и настроить её на вашем сервере (силами квалифицированных разработчиков).
Так мы делали для сети аптек Амурфармация, для сети кожгалантереи Империя сумок, для дистрибьютора оборудования IPС2U и на многих других проектах.
2
Если же сайт на Битрикс, можно также использовать SMART-фильтр (умный фильтр) Битрикса — этот битриксовый компонент мы часто использовали, пока не перешли на ElasticSearch. Используем и сейчас на сайтах с небольшими каталогами, так как настроить его дешевле.
1С-Битрикс — CMS система, где все базовые модули (включая Smart-фильтр) поставляются «из коробки» в готовом универсальном виде. Для бизнеса это означает быструю сборку типового e-commerce функционала на старте. Однако, обратная сторона такой универсальности — избыточность: код содержит сотни настроек, которые могут не пригодиться вашему проекту, но будут создавать постоянную нагрузку на систему.
1С-Битрикс — CMS система, где все базовые модули (включая Smart-фильтр) поставляются «из коробки» в готовом универсальном виде. Для бизнеса это означает быструю сборку типового e-commerce функционала на старте. Однако, обратная сторона такой универсальности — избыточность: код содержит сотни настроек, которые могут не пригодиться вашему проекту, но будут создавать постоянную нагрузку на систему.
Как работает SMART-фильтр Битрикса?
Главный минус любого универсального компонента «коробочной» CMS — его тяжеловесность.
Чтобы подстроиться под миллионы разных сайтов, Битрикс делает свои модули максимально нафаршированными, и избыточными для большинства проектов. Это создает огромную нагрузку на базу данных (MySQL) и повышает требования к хостингу.
При каждом клике пользователя система делает каскад запросов в БД: сначала обращается к одному товару и вытягивает все его свойства, затем ко второму, к третьему и так далее.
В программировании это называется проблемой SQL N+1: когда вместо одного сквозного запроса код выполняет один основной (за списком товаров) и по крайней мере по одному дополнительному запросу для каждого из N элементов в цикле.
При каждом клике пользователя система делает каскад запросов в БД: сначала обращается к одному товару и вытягивает все его свойства, затем ко второму, к третьему и так далее.
В программировании это называется проблемой SQL N+1: когда вместо одного сквозного запроса код выполняет один основной (за списком товаров) и по крайней мере по одному дополнительному запросу для каждого из N элементов в цикле.
Как это работает «на пальцах»?
Представьте, что покупатель ищет на сайте «розовую футболку размера L со скидкой на Складе в Москве».
- SMART-фильтр Битрикса устроен так, что все эти данные лежат в разных таблицах. Серверу приходится заходить в каждую «коробку» с товаром и по очереди её потрошить: «Так, футболка № 1. Размер L? Да. Розовая? Нет, синяя. Ищем дальше… Футболка № 2. Размер L? Да. Розовая? Да. Скидка есть? Да. А в Москве она есть? Нет, только в Новосибирске». На большом каталоге от тысяч таких каскадных запросов база данных MySQL просто «задыхается», а сайт выдает бесконечную загрузку.
В теории код можно переписать так, чтобы любые выборки данных подтягивались в один подход. Но только не в рамках штатного умного фильтра 1С-Битрикс — его архитектура жестко ограничена разработчиками CMS. Поэтому, если у вас в каталоге тысячи товаров, а у каждого есть десятки торговых предложений (SKU) со своими ценами и остатками, фильтр начинает фатально тормозить или выдавать ошибку. Скорость его работы падает линейно: чем больше ассортимент, тем медленнее сайт.
Как работает Elasticsearch?
Здесь архитектура принципиально иная. База данных сайта занимается своим прямым делом — хранением структуры, а вся тяжелая работа по выборкам делегируется поисковому движку.
- Пользователь выбирает параметры — запрос мгновенно улетает в Elasticsearch.
- Elasticsearch (заточенный под мгновенную работу с большими данными) за доли секунды возвращает массив ID товаров, которые подходят под условия.
- База данных сайта по этим ID выполняет всего 2 точечных запроса: первым забирает сами товары, вторым — их свойства.
Сайт летает, независимо от того, 5 000 у вас товаров в базе или 500 000.
- На тот же сложный запрос про «розовую футболку размера L со скидкой на Складе в Москве» Эластик за 5 миллисекунд выдает точный ответ: «Я всё нашёл. Вот ID нужных товаров: 45, 122 и 801». Сайту остаётся всего один раз точечно сходить в базу данных, чтобы просто забрать данные для этих трёх позиций. Нагрузка на сервер стремится к нулю.
Сравнение SMART-фильтра Битрикса и ElasticSearch
| Критерий сравнения | SMART-фильтр 1С-Битрикс | Интеграция с Elasticsearch |
|---|---|---|
| Логика работы с SKU | Строгое ограничение: фильтрация идет либо только по товарам, либо только по торговым предложениям (SKU). | Абсолютная гибкость: позволяет связывать и фильтровать одновременно и по товарам, и по SKU. |
| Скорость при росте каталога | Падает. Чем больше товаров и SKU, тем сильнее фильтр нагружает БД и тормозит. | Максимальная. Количество товаров практически не влияет на скорость выдачи. |
| Сложные выборки и склады | Ограничен одним инфоблоком. Данные по складам и остаткам лежат в другой таблице БД, поэтому штатный фильтр их «не видит» без кастомизации. | Легко объединяет данные из разных таблиц и модулей сайта (остатки, склады, цены) в один поисковый индекс. |
| Виртуальные / составные свойства | Требуют создания новых полей в БД и их регулярного пересчета, что еще сильнее перегружает сайт. | Добавляются одной строкой на уровне индекса движка, не создавая нагрузку на базу данных. |
| Сборные страницы и поиск | Не умеет работать на страницах текстового поиска или брендов без глубокого переписывания кода. | Легко выводится на абсолютно любой странице сайта, включая результаты умного поиска. |
| Стоимость реализации | Дешевле на старте, если не выходить за рамки базовых возможностей «коробки». | Дороже в настройке, но полностью окупается на этапах масштабирования проекта. |
| Критерий сравнения | SMART-фильтр 1С-Битрикс | Интеграция с Elasticsearch |
|---|---|---|
| Логика работы с SKU | Строгое ограничение: фильтрация идет либо только по товарам, либо только по торговым предложениям (SKU). | Абсолютная гибкость: позволяет связывать и фильтровать одновременно и по товарам, и по SKU. |
| Скорость при росте каталога | Падает. Чем больше товаров и SKU, тем сильнее фильтр нагружает БД и тормозит. | Максимальная. Количество товаров практически не влияет на скорость выдачи. |
| Сложные выборки и склады | Ограничен одним инфоблоком. Данные по складам и остаткам лежат в другой таблице БД, поэтому штатный фильтр их «не видит» без кастомизации. | Легко объединяет данные из разных таблиц и модулей сайта (остатки, склады, цены) в один поисковый индекс. |
| Виртуальные / составные свойства | Требуют создания новых полей в БД и их регулярного пересчета, что еще сильнее перегружает сайт. | Добавляются одной строкой на уровне индекса движка, не создавая нагрузку на базу данных. |
| Сборные страницы и поиск | Не умеет работать на страницах текстового поиска или брендов без глубокого переписывания кода. | Легко выводится на абсолютно любой странице сайта, включая результаты умного поиска. |
| Стоимость реализации | Дешевле на старте, если не выходить за рамки базовых возможностей «коробки». | Дороже в настройке, но полностью окупается на этапах масштабирования проекта. |
Часто задаваемые вопросы (FAQ) про фильтрацию на сайте
Можно, но это классическая ошибка планирования бюджета. Переделка готового и наполненного интернет-магазина «на лету» в сумме обойдется заметно дороже, чем если бы вы заложили правильную архитектуру (реализация на базе Elasticsearch) на этапе проектирования. Придется переписывать логику фильтрации, зачастую — менять фронтенд и заново тестировать весь e-commerce контур.
Нет. Вся магия происходит «под капотом». Для ваших сотрудников визуальный интерфейс панели управления останется прежним. Они будут так же привычно заводить карточки товаров, менять цены и свойства, а система автоматически обновит поисковый индекс.
Да, это одна из главных причин его внедрения. В периоды пикового трафика (например, в Черную пятницу) пользователи генерируют миллионы запросов к фильтрам. Elasticsearch берёт всю аналитическую нагрузку на себя. База данных сайта (MySQL) вообще не участвует в поиске и переборе модификаций, она лишь точечно отдаёт контент по готовым ID. Это предотвращает «падение» сервера и гарантирует, что страницы каталога будут открываться мгновенно даже при кратном росте трафика.
Так что же выбрать для вашего e-commerce?
- Выбирайте SMART-фильтр 1С-Битрикс, если у вас небольшой нишевый интернет-магазин (до 1000 товаров), стандартная складская логика и жестко ограниченный стартовый бюджет.
- Выбирайте Elasticsearch, если вы строите масштабный проект, маркетплейс или e-commerce с планами на быстрый рост, где критически важны скорость отклика, умный поиск и безупречный UX.
- Отдельно стоит сказать про проекты на фреймворках. Если вы изначально выбрали гибкую разработку (например, на Laravel), то подключение Elasticsearch — это единственно верный шаг. Фреймворки позволяют сразу собрать идеальную микросервисную архитектуру. Связка Laravel + Elasticsearch — это классический мировой стек для высоконагруженного e-commerce, где поиск, фильтрация и сортировка работают быстро, независимо и безболезненно для базы данных.