Задать вопрос

Как сделать удобный поиск с умным фильтром в интернет-магазине?

Добрый день!

Задача, с моей точки зрения, не такая тривиальная. Состоит в том, чтобы сделать поиск как в крупных интернет-магазинах, т.е. поиск с использованием системы фильтров с показом количества товаров при выборе этого фильтра.


Например вот этот магазин http://www.zappos.com/mens-clothing~2S сразу видно, что при выборе бренда 2XU будет показано 32 товара (это посчиталось заранее). После выбора все параметры снова пересчитаются и будут отображать реальное положение дел, т.е. в этих 32 товарах будет 24 черных

Отсюда возникает 2 вопроса:

1. Как организовать хранение данных


Когда-то я уже задавал вопрос Чем плохо EAV решение для интернет-магазина?, но пока так и не выбрал способ, выбор между EAV и отдельной таблицей для каждого типа товара (товары могут быть совсем разные, и параметры могут быть тоже разные, например телевизоры, телефоны, одежда и пр)

2. Как собственно организовать такой фильтр


Сходу видится 2 решения:
  • Загрузить все товары подходящие под фильтр в память и уже там посчитать будущие цифры с возможным выбором фильтра
  • Сделать 300+ запросов в базу, для каждого параметра, чтобы узнать кол-во товаров с этим параметров


Есть конечно еще много не отвеченных вопросов (как разделить товары по типам, чтобы лишние параметры например для телевизора, не показывались при поиске куртки) и другие. Если кто знает книжку, или что почитать на эту тему буду благодарен. Хочется сделать действительно удобный интернет-магазин, а не плодить корявые каталоги.
  • Вопрос задан
  • 15542 просмотра
Подписаться 21 Оценить Комментировать
Ответ пользователя Искандер Гиниятуллин К ответам на вопрос (6)
Я бы сделал так — EAV для хранения информации, Sphinx для поиска.

Тогда эти ваши 300+ запросов будут делаться не к базе, а к сфинксу, а если это реализовать как мульти-запросы к сфинксу то работать будет очень быстро.

Ну и заранее делать можно не все запросы, а только основные, а по мере выбора подгружать аяксом
Ответ написан