@apptimeru

Как устроены сложные фильтры в интернет магазинах?

Здравствуйте, подскажите пожалуйста как устроены сложные фильтры товаров в интернет магазинах, например тут https://www.dns-shop.ru/catalog/17a899cd16404e77/p...

Суть в том что когда выбираешь очередной фильтр, многие другие фильтры блокируется, если товаров по этим фильтрам нет, и получается в итоге что пустых страниц без товаров как бы и нет. Интересна сама логика построения таблиц или запросов подобного, создаются ли какие-то дополнительные таблицей связей может быть? Просто в моей представление это тьма запросов к базе данных, чтобы высчитать по каким фильтрам есть товары а по каким нет, да еще и количество товаров показать возле каждого фильтра. Подскажите кто сталкивался, где можно на эту тему информацию найти.
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 3
TheDeadOne
@TheDeadOne
Седой и строгий
Секрет в том, что эти запросы делаются не к базе. Это фасетный поиск, осуществляемый движком полнотекстового поиска, типа Sphinx или Elasticsearch.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Если кратко: это каскадный обратный фильтр (обратный "водопад"), который строится от "листа" (самая "глубокая" вложенность) в обратную сторону (вверх по "дереву").

Т.е., так:
1. Берём количество товаров для всех "листовых" свойств/параметров (select count) в нужной категории (эти таблицы лучше готовить и обновлять заранее, при добавлении/удалении товаров),
2. Выбираем свойство с наименьшим количеством товаров
3. Добавляем условие с этим свойством в фильтр выборки запроса на каждой итерации построения выражения и ищем количество товаров на уровне выше...
4. Если на текущем уровне все нули - выходим.
5. GOTO 2
Ответ написан
SEVNTEC
@SEVNTEC
HTML-верстка
очередной фильтр, многие другие фильтры блокируется, если товаров по этим фильтрам нет

Вроде что-то такого, не знаю, насколько это правильно:
  1. Пришла выборка товаров
  2. Свойства товаров сгруппированы по названию (id)
  3. Исключены дубли значений свойств
  4. Сопоставление свойств-значений с тем что в фильтрах с блокировкой значение != значение ИЛИ удаление(скрытие) значение != значение и загрузка новых Свойство-Значение

А там уже у каждого свойства может быть ещё атрибут определяющий какой интерфейс фильтра будет использован.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы