Необходим расширенный совет по архитектуре поиска - PullRequest
0 голосов
/ 27 марта 2012

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

item_id, supplier, price range, color

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

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

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

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

ПРИМЕЧАНИЕ: архитектурный совет - это все, что мне нужно, как подойти к нему, и ответ НАСТОЯТЕЛЬНО приветствуется, я ломаю голову над этим в течение 2 дней.

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

РЕДАКТИРОВАТЬ: Вот пример - нажав любой из критериев поиска наслева, вы влияете на результаты поиска:

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

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

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

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

1 голос
/ 27 марта 2012

Я не эксперт по аспектам, поэтому я полагаюсь на ответ Брента в этом направлении, но то, что вы описываете, довольно легко реализовать в 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.из двух полей.

Если вам требуется COUNT каждого критерия, вы можете использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...