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

Добрый день!

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


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

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

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


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

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


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


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

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

Ну и заранее делать можно не все запросы, а только основные, а по мере выбора подгружать аяксом
Ответ написан
taliban
@taliban
php программист
market.yandex.ua/guru.xml?CMD=-RR=9,0,0,0-VIS=70-CAT_ID=432460-EXC=1-PG=10&hid=91013
Лучше я не видел в жизни
Ответ написан
mark_ablov
@mark_ablov
Как вы верно заметили, это называется фасеты (facet).
Как правило full-text или гибкий поиск по большому числу параметров реализуют на поисковом движке — Sphinx или Solr (бывший Lucene).
Не знаю как в первом, но во втором это реализуется крайне просто, за один запрос — wiki.apache.org/solr/SimpleFacetParameters
Ответ написан
Комментировать
@MikhailEdoshin
Судя по скорости, там что-то вроде OLAP. То есть все предварительно посчитано; при добавлении нового товара соответствующие сводные цифры обновляются.
Ответ написан
SharkyFLY
@SharkyFLY
я делал с тремя таблицами

1. В одной таблице хранил объекты каталога
2. Для связи ид объекта, ид свойства, значение свойства
3. ид свойства, название свойства

ну и выборку можно сделать так по любому количеству свойств и там же узнать количество товаров… mysql да и только… с большими объмами будет работать отлично
Ответ написан
Aleksey
@Aleksey
Да, zappos используют Solr.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы