Почему даже при разработке на Битрикс мы предпочитаем делать фильтры на ElasticSearch
Умные фильтры для e-commerce
Сибирикс
Умные фильтры
для e-commerce
Почему даже при разработке на Битрикс мы предпочитаем делать фильтры на ElasticSearch
Когда в интернет-магазине больше десятка товаров, уже хочется помочь пользователю с выбором. А если товаров больше сотни, а тем более несколько тысяч, — фильтр становится необходим.
Маркетплейсы пользователей избаловали, так что в минимальной комплектации они ожидают от фильтра в любом интернет-магазине:
  • свой набор критериев фильтрации для каждой категории каталога, причем критериев релевантных;
  • возможность отфильтровать список товаров по наличию (как в целом в магазине, так и на определенном складе, откуда привезут быстрее);
  • возможность выбрать только акционные товары (все любят экономить);
  • фильтрацию по тегам. Когда можно посмотреть товары, заранее отмеченные продавцом, как носители определенного свойства. Например, видеть только веганские продукты в каталоге доставке;
  • возможность фильтровать товары не только в категориях каталога, но и на "сборных" страницах, где представлены товары сразу из многих категорий. Например, в результатах поиска, на странице бренда, в акционной подборке;
  • возможность фильтровать по цене уже с учетом скидок (правда с этим и не все маркетплейсы сейчас справляются).

Получается, фильтр при разработке надо сразу планировать умный и гибкий.

Умный фильтр на сайте: какие есть варианты?

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

Elasticsearch развивает open-source решение, но для коммерческого использования в enterprise-среде применяется серверная публичная лицензия «SSPL (Server Side Public License). Для стандартных интернет-магазинов это означает, что покупать систему отдельно не нужно — достаточно развернуть и настроить её на вашем сервере (силами квалифицированных разработчиков).

Так мы делали для сети аптек Амурфармация, для сети кожгалантереи Империя сумок, для дистрибьютора оборудования IPС2U и на многих других проектах.
2
Если же сайт на Битрикс, можно также использовать SMART-фильтр (умный фильтр) Битрикса — этот битриксовый компонент мы часто использовали, пока не перешли на ElasticSearch. Используем и сейчас на сайтах с небольшими каталогами, так как настроить его дешевле.

1С-Битрикс — CMS система, где все базовые модули (включая Smart-фильтр) поставляются «из коробки» в готовом универсальном виде. Для бизнеса это означает быструю сборку типового e-commerce функционала на старте. Однако, обратная сторона такой универсальности — избыточность: код содержит сотни настроек, которые могут не пригодиться вашему проекту, но будут создавать постоянную нагрузку на систему.

Как работает SMART-фильтр Битрикса?

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

При каждом клике пользователя система делает каскад запросов в БД: сначала обращается к одному товару и вытягивает все его свойства, затем ко второму, к третьему и так далее.

В программировании это называется проблемой SQL N+1: когда вместо одного сквозного запроса код выполняет один основной (за списком товаров) и по крайней мере по одному дополнительному запросу для каждого из N элементов в цикле.

Как это работает «на пальцах»?

Представьте, что покупатель ищет на сайте «розовую футболку размера L со скидкой на Складе в Москве».
  • SMART-фильтр Битрикса устроен так, что все эти данные лежат в разных таблицах. Серверу приходится заходить в каждую «коробку» с товаром и по очереди её потрошить: «Так, футболка № 1. Размер L? Да. Розовая? Нет, синяя. Ищем дальше… Футболка № 2. Размер L? Да. Розовая? Да. Скидка есть? Да. А в Москве она есть? Нет, только в Новосибирске». На большом каталоге от тысяч таких каскадных запросов база данных MySQL просто «задыхается», а сайт выдает бесконечную загрузку.
В теории код можно переписать так, чтобы любые выборки данных подтягивались в один подход. Но только не в рамках штатного умного фильтра 1С-Битрикс — его архитектура жестко ограничена разработчиками CMS. Поэтому, если у вас в каталоге тысячи товаров, а у каждого есть десятки торговых предложений (SKU) со своими ценами и остатками, фильтр начинает фатально тормозить или выдавать ошибку. Скорость его работы падает линейно: чем больше ассортимент, тем медленнее сайт.

Как работает Elasticsearch?

Здесь архитектура принципиально иная. База данных сайта занимается своим прямым делом — хранением структуры, а вся тяжелая работа по выборкам делегируется поисковому движку.
  1. Пользователь выбирает параметры — запрос мгновенно улетает в Elasticsearch.
  2. Elasticsearch (заточенный под мгновенную работу с большими данными) за доли секунды возвращает массив ID товаров, которые подходят под условия.
  3. База данных сайта по этим 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) про фильтрацию на сайте

Так что же выбрать для вашего e-commerce?

  • Выбирайте SMART-фильтр 1С-Битрикс, если у вас небольшой нишевый интернет-магазин (до 1000 товаров), стандартная складская логика и жестко ограниченный стартовый бюджет.
  • Выбирайте Elasticsearch, если вы строите масштабный проект, маркетплейс или e-commerce с планами на быстрый рост, где критически важны скорость отклика, умный поиск и безупречный UX.
  • Отдельно стоит сказать про проекты на фреймворках. Если вы изначально выбрали гибкую разработку (например, на Laravel), то подключение Elasticsearch — это единственно верный шаг. Фреймворки позволяют сразу собрать идеальную микросервисную архитектуру. Связка Laravel + Elasticsearch — это классический мировой стек для высоконагруженного e-commerce, где поиск, фильтрация и сортировка работают быстро, независимо и безболезненно для базы данных.