Здравствуйте
Имеется некоторая продукция ( пускай это будет модель компьютеров )
эта продукция обладает рядом характеристик:
1)размеры монитора
a) 10x20
a) 100x200
c) большой
2)объем жесткого диска:
a) 300гб
b) 300Гб - 1 Тб
4) возможность выполнять конкретную задачу
a)можно играть в игры
b)можно смотреть фильмы
и подобные ...
Т.е. есть какое-то количество вопросов на которое есть какое-то количество возможных ответов.
Для пользователя необходимо организовать поиск продукции подходящей под какие-то критерии.
Т.е. пользователю будет задано пару десятков вопросов с различными вариантами ответов после которых необходимо осуществить поиск.
На вопросах возможно выбрать либо 1 вариант ответа, либо все сразу либо вообще ничего не выбирать.
..............................
Необходимо каким-то образом осуществить по этим данным поиск и выдать товар наиболее подходящий для пользователя, либо подходящий на 100%. Т.е. есть "приближенный" и "точный" поиск.
------------
Один из вариантов решения - типа "битовая маска".
Общая суть:
на основании всех вопросов для всех товаром составляем битовые маски, где 1 - вариант ответа удовлетворящий критерию поиска, а 0 - нет
к примеру если есть ПК с характеристиками: размеры монитора - 100x200, объем жесткого диска- 300гб, возможность выполнять конкретную задачу - можно играть в игры и можно смотреть фильмы
то битовая маска для него будет
0101011
А для аналогичного ПК, но на котором нельзя играть в игры маска будет такой:
0101001
Следовательно после ответов юзера на ряд вопросов по этим битовым маскам можно осуществить поиск.
На это "битовое поле" можно поставить индекс и таким макаром для точного поиска будет работать достаточно быстро
Но вот при "приближенном" поиске, когда нужно найти товые максимально подходящие юзеру - нужно будет сканить все записи ...
------------------------------------------------------------------------------
Собственно вопрос заключается в том как можно усовершенствовать данный способ или какой есть аналогичный ?
Данный вид поиска очень напоминает поиск во всякого рода магазинах.
Интересуют как и "хорошие" в плане производительности алгоритмы, так и не очень хорошие но какие-то известные или просто интересные. Нужно это для написания некой отчетности и проведения сравнительных характеристик.
Т.е. интересует решение и на уровне СУБД и с возможной реализацией на каком-то ЯП.
многокритериальный поиск в MySQL
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: многокритериальный поиск в MySQL
Задача называется на самом деле фасетным поиском (faceted search).
Пока пришло в голову:
1. Храним каждое в своём поле или таблице-справочнике. Выборка в лоб кучей join-ов и where.
2. Sphinx (http://habrahabr.ru/blogs/sphinx/64318/)
Пока пришло в голову:
1. Храним каждое в своём поле или таблице-справочнике. Выборка в лоб кучей join-ов и where.
2. Sphinx (http://habrahabr.ru/blogs/sphinx/64318/)
Нравится Yii? Давайте сделаем его лучше!.
Re: многокритериальный поиск в MySQL
Применяю Sphinx для этого, одно из самых простых и быстрых решений.
Еще можно http://lucene.apache.org/solr/, но нужно уметь готовить java.
Еще можно http://lucene.apache.org/solr/, но нужно уметь готовить java.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: многокритериальный поиск в MySQL
Если не уметь готовить JRE, SOLR вытекает и валит сервер. Проверено.
Нравится Yii? Давайте сделаем его лучше!.
Re: многокритериальный поиск в MySQL
Спасибо больше
походу подобную задачу также решают через Entity-attribute-value model (EAV)
в частности, в Magento на его принципах реализован поиск товаров (хотя и могу ошибаться)
для Yii даже есть реализация этой штуки
viewtopic.php?f=9&t=383
если есть еще какие-то идеи ( даже самые безумные ) рад буду услышать =)
походу подобную задачу также решают через Entity-attribute-value model (EAV)
в частности, в Magento на его принципах реализован поиск товаров (хотя и могу ошибаться)
для Yii даже есть реализация этой штуки
viewtopic.php?f=9&t=383
если есть еще какие-то идеи ( даже самые безумные ) рад буду услышать =)
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: многокритериальный поиск в MySQL
Ещё модно попробовать MongoDB.
Нравится Yii? Давайте сделаем его лучше!.
Re: многокритериальный поиск в MySQL
в моем случае использование MySQL одно из требований, которое нельзя изменить
ну а если нет такого ограничения в выборе средств, то не раляционная субд, насколько я понимаю, покажет себя намного лучше, в том же faceted search
ну а если нет такого ограничения в выборе средств, то не раляционная субд, насколько я понимаю, покажет себя намного лучше, в том же faceted search
-
- Сообщения: 77
- Зарегистрирован: 2010.10.17, 11:00
- Откуда: Днепропетровск
- Контактная информация:
Re: многокритериальный поиск в MySQL
Одно время я заюзал sphinx, очень советую, работает быстро и базу не дергает,
это если нужно быстро поднять поиск
это если нужно быстро поднять поиск
Мой блог http://blog.rapository.com
Re: многокритериальный поиск в MySQL
Не догнал, зачем в такой простой задаче применять такие сложности???