2014-05-06 2 views
0

Добрый день!Sphinx поиск в параметрах продукта (атрибуты продукта)

У меня есть проблемы в моем поиске сфинкса. Я хочу искать в параметрах продукта, но не могу понять, как я могу это сделать.

Например.

Продукты стол

product_id INT 
product_name STRING 

Продукт Params стол

param_id INT 
product_id INT 
param_name STRING 
param_value STRING 

И эти данные, например:

Продукты

1 TV 
2 Player 

Params

1 1 Size Big 
2 1 Color Red 
3 1 Weight 3.0 
4 2 Size Small 
5 2 Color Brown 
6 2 Length 20 

И я хочу, чтобы найти все продукты, где размера мал ИЛИ цвет красного

ответ

1

Есть много различных способов. Может быть, один из самых простых:

sql_query = SELECT product_id, product_name, \ 
    GROUP_CONCAT(CONCAT(param_name,'_',param_value)) AS params \ 
    FROM products LEFT JOIN params USING (product_id) \ 
    GROUP BY product_id \ 
    ORDER BY NULL 

(Thats actully запросов MySQL, но SQL-сервер не может быть сильно отличается)

Может тогда просто сделать (SphinxQL) запросы как

SELECT * FROM index WHERE MATCH('keyword @params (Size_Small | Color_Red)'); 

(если какой-либо из ваших параметров имеет пробелы, возможно, потребуется использовать REPLACE, чтобы изменить его, чтобы сохранить их как одно слово - или использовать «синтаксис фразы»)

+0

Спасибо большое! И ... Могу ли я сортировать запрос по значениям параметров или сравнивать. Например: мне нужен весь телевизор, где Screen> 24 и т. Д. – Dmitriy

+0

№ Это делает их фейдами, которые ограничены точным соответствием в полнотекстовом поиске. Для сортировки или для запросов диапазона необходимо использовать атрибуты. Использование атрибутов JSON, вероятно, является самым простым, но, возможно, не так хорошо работает, не знаю. – barryhunter

Смежные вопросы