Ускорение фильтров в каталоге
В проекте использовали
Клиент пришел с проблемой
Интернет-магазин косметических товаров хотел ускорить работу фильтра для удобного поиска в базе данных mysql, который часто выдавал некорректные результаты при задании сложных условий. На сайте заказчика было 54 327 наименований товаров. В описаниях различных категорий – 116 свойств. Ежедневно сайт посещают более 7000 посетителей, которым для комфортного процесса покупок важна более предсказуемая и надежная работа фильтра.
Мы использовали этот подход на нескольких магазинах. В разных отраслях. И каждый раз он давал отличный результат. Скорость фильтрации возрастала в разы. И появлялись новые возможности для владельцев.
Всегда есть особенности
К проблемам приводила ошибка в логике самописных компонентов каталога. К тому же заказчик хотел использовать механизм фильтра для создания новых блоков, чтобы агрегировать товары по свойствам и на основе таких выборок создавать специальные разделы, учитывающие сразу несколько заданных категорий (например, вид товара + назначение, допустим «маска», «тканевая маска» и « для лица»). На старте работ стандартный генератор либо вообще не включал страницы каталога с фильтрами, либо добавлял ссылки на все возможные комбинации. А нам предстояло сделать так, чтобы в sitemap попадали все весомые страницы фильтров с уникальными мета-тегами, текстами и достаточным количеством товаров. В процессе решения мы также хотели улучшить формирование sitemap.
Логика работы фильтров сама по себе не простая. Нужно получить товары с определенной страницы, и их свойства должны иметь одно из выбранных значений. Стандартное решение – оптимизация базы данных, улучшение запросов, создание индексов. Но классическая БД не предназначена для таких фильтров. Кеширование результатов фильтрации тоже не подходило: слишком много возможных комбинаций и неоправданное количество ресурсов, необходимое для хранения всех результатов.
Как мы это сделали
Для решения задачи мы использовали поисковую платформу Apache Solr, которая умеет фильтровать товары необходимым образом. Без дополнительных настроек она работает быстрее и стабильнее, чем база данных: скорость выдачи по запросу 0,0035 секунд против результата БД – от 0,5 секунд и дольше.