2012-03-27 3 views
0

У меня есть база данных, полные вещи, которые должны быть для поиска по любому или все из следующих критериев:Расширенного совета архитектуры поиска neeeded

item_id, supplier, price range, color 

Теперь это просто - выбор пользователя флажков вывешен, и я превратите его в соответствующий запрос.

ВОПРОС: как сделать так, чтобы поиск динамически менялся. Я имею в виду - если вы выберете определенный ценовой диапазон, все поставщики и цвета, которые не соответствуют ему, будут удалены из выбора, и любые выбранные элементы также будут отменены.

Аналогичным образом, если пользователь проверяет определенный цвет, все поставщики, которые его не предлагают, и все диапазоны цен, которые не имеют его, удаляются из выбора. А также все элементы, которые пользователь может предварительно выбрать, но которые не находятся в этом цвете.

Вопрос: это даже хорошая идея, если вы против, пожалуйста, дайте мне знать, почему?

ПРИМЕЧАНИЕ: Архитектурный совет - это все, что мне нужно, как подойти к нему, и ответить ВЫСОКО оценили, я пробиваю себе голову над этим в течение 2 дней.

Также не будет отказано в коде, и это может быть на любом языке или псевдокоде, мне нужно расшифровать способ мышления здесь.

EDIT: Вот пример - нажав любую из критериев поиска слева, вы повлиять на результаты поиска:

http://www.wanajob.com/emploi?search=informatique&fpc=&fpr=

ответ

1

Я не специалист по фасеткам, поэтому я откладываю ответ Брент в этом направлении, но то, что вы описываете, довольно легко реализовать в MySQL для ваших основных данных поиска.

Предположим, что пользователь ищет «красный» цвет. Затем можно построить список поставщиков и ценовых диапазонов в результатах поиска, как этот

SELECT DISTINCT supplier FROM items WHERE color = 'red'; 
SELECT DISTINCT price_range FROM items WHERE color = 'red'; 

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

SELECT DISTINCT supplier,price_range FROM items WHERE color = 'red'; 

возвратит все DISTINCT комбинации двух полей ,

Если вам требуется подсчетом каждого критерия, то вы можете использовать GROUP BY

SELECT supplier,COUNT(*) FROM items WHERE color = 'red' GROUP BY supplier; 
SELECT price_range,COUNT(*) FROM items WHERE color = 'red' GROUP BY price_range; 
2

Похоже, вы спрашиваете о гранях. Хотя грани противоположны тому, что вы просите, поскольку они противоположны, вы можете вывести, что удалить. Границы скажут вам, что в рамках поиска есть X-синие, Y-красные и Z-желтые предметы. Поэтому, если вы сузили поиск по одному из этих цветов, вы знаете, сколько элементов будет в новом результате поиска. Это довольно распространено в Интернете сейчас, особенно на торговых сайтах. Поэтому есть много примеров.

Поисковые системы, такие как Solr, Elastic Search, Sphinx и т. Д., Предоставляют информацию фасет. Mysql этого не делает. Solr является самым зрелым, Elastic Search, вероятно, является наиболее масштабируемым, и Sphinx может читать напрямую из mysql.

+0

+1 за открытие совершенно новый горизонт для меня, не имел ни малейшего представления о гранях. Благодарю. – CodeVirtuoso

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

  • Нет связанных вопросов^_^