многокритериальный поиск в MySQL

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

многокритериальный поиск в MySQL

Сообщение chang »

Здравствуйте

Имеется некоторая продукция ( пускай это будет модель компьютеров )

эта продукция обладает рядом характеристик:
1)размеры монитора
a) 10x20
a) 100x200
c) большой
2)объем жесткого диска:
a) 300гб
b) 300Гб - 1 Тб
4) возможность выполнять конкретную задачу
a)можно играть в игры
b)можно смотреть фильмы
и подобные ...

Т.е. есть какое-то количество вопросов на которое есть какое-то количество возможных ответов.

Для пользователя необходимо организовать поиск продукции подходящей под какие-то критерии.
Т.е. пользователю будет задано пару десятков вопросов с различными вариантами ответов после которых необходимо осуществить поиск.
На вопросах возможно выбрать либо 1 вариант ответа, либо все сразу либо вообще ничего не выбирать.
..............................
Необходимо каким-то образом осуществить по этим данным поиск и выдать товар наиболее подходящий для пользователя, либо подходящий на 100%. Т.е. есть "приближенный" и "точный" поиск.
------------
Один из вариантов решения - типа "битовая маска".
Общая суть:
на основании всех вопросов для всех товаром составляем битовые маски, где 1 - вариант ответа удовлетворящий критерию поиска, а 0 - нет

к примеру если есть ПК с характеристиками: размеры монитора - 100x200, объем жесткого диска- 300гб, возможность выполнять конкретную задачу - можно играть в игры и можно смотреть фильмы
то битовая маска для него будет
0101011
А для аналогичного ПК, но на котором нельзя играть в игры маска будет такой:
0101001

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

На это "битовое поле" можно поставить индекс и таким макаром для точного поиска будет работать достаточно быстро
Но вот при "приближенном" поиске, когда нужно найти товые максимально подходящие юзеру - нужно будет сканить все записи ...
------------------------------------------------------------------------------
Собственно вопрос заключается в том как можно усовершенствовать данный способ или какой есть аналогичный ?
Данный вид поиска очень напоминает поиск во всякого рода магазинах.

Интересуют как и "хорошие" в плане производительности алгоритмы, так и не очень хорошие но какие-то известные или просто интересные. Нужно это для написания некой отчетности и проведения сравнительных характеристик.
Т.е. интересует решение и на уровне СУБД и с возможной реализацией на каком-то ЯП.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: многокритериальный поиск в MySQL

Сообщение samdark »

Задача называется на самом деле фасетным поиском (faceted search).

Пока пришло в голову:
1. Храним каждое в своём поле или таблице-справочнике. Выборка в лоб кучей join-ов и where.
2. Sphinx (http://habrahabr.ru/blogs/sphinx/64318/)
mitallast
Сообщения: 207
Зарегистрирован: 2010.02.21, 20:40
Откуда: Голицыно
Контактная информация:

Re: многокритериальный поиск в MySQL

Сообщение mitallast »

Применяю Sphinx для этого, одно из самых простых и быстрых решений.

Еще можно http://lucene.apache.org/solr/, но нужно уметь готовить java.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: многокритериальный поиск в MySQL

Сообщение samdark »

Если не уметь готовить JRE, SOLR вытекает и валит сервер. Проверено.
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: многокритериальный поиск в MySQL

Сообщение chang »

Спасибо больше

походу подобную задачу также решают через Entity-attribute-value model (EAV)
в частности, в Magento на его принципах реализован поиск товаров (хотя и могу ошибаться)
для Yii даже есть реализация этой штуки
viewtopic.php?f=9&t=383


если есть еще какие-то идеи ( даже самые безумные ) рад буду услышать =)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: многокритериальный поиск в MySQL

Сообщение samdark »

Ещё модно попробовать MongoDB.
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: многокритериальный поиск в MySQL

Сообщение chang »

в моем случае использование MySQL одно из требований, которое нельзя изменить

ну а если нет такого ограничения в выборе средств, то не раляционная субд, насколько я понимаю, покажет себя намного лучше, в том же faceted search
Filsh
Сообщения: 77
Зарегистрирован: 2010.10.17, 11:00
Откуда: Днепропетровск
Контактная информация:

Re: многокритериальный поиск в MySQL

Сообщение Filsh »

Одно время я заюзал sphinx, очень советую, работает быстро и базу не дергает,
это если нужно быстро поднять поиск
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: многокритериальный поиск в MySQL

Сообщение TM123 »

Не догнал, зачем в такой простой задаче применять такие сложности???
Ответить