Задача разработать фильтр поиска товаров по типу яндекс.маркет.
Как пример, это фильтр поиска по кондиционерам:
market.yandex.ua/guru.xml?CMD=-RR%3D5%2C0%2C0%2C0-...
в предыдущем своем вопросе я узнал про EAV структуру, почитал понял все минусы и плюсы. Еще я видел множество рекомендаций в сторону mongodb и sphinx. Я хочу попробовать скомбинировать это дело таким образом, чтобы избавиться от множество джоинов и связывающих таблиц в mysql.
Если следовать EAV, у нас есть следующие таблицы: Товары, Категории, Атребуты, Значение Атрибутов, Свзязь Товар Категория, Связь Товар Атрибуты, Связь Атрибут Значение.
В результате чего, если к примеру мы находимся в разделе
Кондиционеры и нужно показать все кондиционеры цена которых от 1000 до 5000, производителя Самсунг и с Сенсором Движения.
Тоесть запрос будет примерно такой:SELECT * FROM Товары
JOIN Категории WHERE Кондиционеры
JOIN Связь Товар Атрибуты
JOIN Связь Атрибут Значение WHERE цена AND самсунг AND Сенсором Движения
Возможно джоинов будет даже больше. Все бы ничего, но на большой базе это будет печально. А товары будут заполняться быстро их будет много.
Я бы хотел убрать таблицы связей и оставить только следующие:
- Товары
- Категории
- Атрибуты
- Значения
Теперь собственно вопрос в котором я запутался, как можно использовать mongodb и sphinx для поиска товаров ?
Из прочтенных мной статей я понял, что в mongodb нужно хранить связи и выборку делать конкретно через mongodb.
Но вот какие именно связи там нужно хранить и как их записывать я не понял.
Также я не как не могу понять для чего нужен sphinx. Тоесть везде описывают что это крутой поисковой движок, у меня всегда складывалось впечатление, что это крутой аналог LIKE. Собственно подходит ли он для заметы JOIN ?