R50 0c2308b8b8b93ca8e81f55dcb2fb995b
Доработка и создание сложных магазинов и сервисов

Ускорение фильтров в каталоге

Добавлено 26 ноя 2019 в 13:43
Клиент пришел с проблемой
Интернет-магазин косметических товаров хотел ускорить работу фильтра для удобного поиска в базе данных mysql, который часто выдавал некорректные результаты при задании сложных условий. На сайте заказчика было 54 327 наименований товаров. В описаниях различных категорий – 116 свойств. Ежедневно сайт посещают более 7000 посетителей, которым для комфортного процесса покупок важна более предсказуемая и надежная работа фильтра.

Всегда есть особенности
К проблемам приводила ошибка в логике самописных компонентов каталога. К тому же заказчик хотел использовать механизм фильтра для создания новых блоков, чтобы агрегировать товары по свойствам и на основе таких выборок создавать специальные разделы, учитывающие сразу несколько заданных категорий (например, вид товара + назначение, допустим «маска», «тканевая маска» и « для лица»). На старте работ стандартный генератор либо вообще не включал страницы каталога с фильтрами, либо добавлял ссылки на все возможные комбинации. А нам предстояло сделать так, чтобы в sitemap попадали все весомые страницы фильтров с уникальными мета-тегами, текстами и достаточным количеством товаров. В процессе решения мы также хотели улучшить формирование sitemap.

Логика работы фильтров сама по себе не простая. Нужно получить товары с определенной страницы, и их свойства должны иметь одно из выбранных значений. Стандартное решение – оптимизация базы данных, улучшение запросов, создание индексов. Но классическая БД не предназначена для таких фильтров. Кеширование результатов фильтрации тоже не подходило: слишком много возможных комбинаций и неоправданное количество ресурсов, необходимое для хранения всех результатов.

Как мы это сделали
Для решения задачи мы использовали поисковую платформу Apache Solr, которая умеет фильтровать товары необходимым образом. Без дополнительных настроек она работает быстрее и стабильнее, чем база данных: скорость выдачи по запросу 0,0035 секунд против результата БД – от 0,5 секунд и дольше.

В результате
Таким образом, мы ускорили работу фильтра в 3,5 раза, а ошибки в выдаче исчезли за счет правильной фильтрации в Solr. Теперь на сайте можно получать по запросу близкие по характеристикам товары. С таким механизмом фильтра мы смогли сделать несколько специфических разделов, получить доступ к быстрому формированию прайсов для google и yandex, а также сгенерировали sitemap с учетом фильтров в каталоге.

В проекте использовали
  • 1с-битрикс
  • Apache Solr
  • 1c
B6fad509d9