R50 623a23d280fdbc8e6d0f80ee6f4abcdf
Веб-программирование

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

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


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

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



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



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