Как реализовать фасетную навигацию в интернет магазине?

Здравствуйте! Я создаю интернет магазин и хочу использовать "умные" фильтры в каталоге товаров для быстрого поиска. Из примеров нашел реализацию на wildberies. Там сделано так, что вы выбираете оранжевый цвет, фильтры обновляются, и у других атрибутов (размер, бренд) показываются значения только подходящие под оранжевый цвет.
Я храню в базе данных атрибуты товаров по следующей схеме
product_id | attribute_id | value_id
Вопросы: какой алгоритм подойдет для реализации подобного фильтра? Как посчитать количество товаров для каждого значения атрибута?

Возьмем к примеру базовый набор атрибутов: Бренд, размер, расцветка

PS: Я уже пробовал несколько вариантов реализации, но возникали сложности на разных этапах.
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
@IgoNsk
backend web developer
На еластике это решается так https://project-a.github.io/on-site-search-design-...

на mysql - тоже можно, через запросы с фильтрацией по выбранным значениям в форме и группировкой по атрибутам всех имеющихся значений для товаров. Тут с ростом данных будет проседать время ответа, но это надо оценивать исходя из кол-ва данных на проекте, по которым идет поиск.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
С такими задачами СУРБД справляются плохо. Обычно их реализуют движками полнотекстового поиска, типа Elasticsearch.
Ответ написан
@xenonhammer
Учитывая что товары находятся БД, то обращаясь к фильтру товаров по фасету можно получить нужные product_id при обращении в БД по attribute_id .
Например через SELECT `product_id` FROM `database` WHERE `attribute_id` = 939;
в MySQL можно получить и число затронутых строк и сами товары
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы