Выбор архитектуры каталога и поискового движка для организации фасетного поиска?
Каталог недвижимости, где есть объекты и их предки. К каждому объекту могут быть прикреплены определенные характеристики.
К примеру, объект ДОМ имеют характеристику 400м от метро. Объект КВАРТИРА наследуется от объекта ДОМ и имеют характеристику «количество комнат 3»
Необходимо организовать фасетный поиск объектов с учетом родительских характеристик. К примеру по 2м характеристикам :
Количество комнат и удаленность от метро.
В дальнейшем потребуются полнотекстовый поиск по объектам и преобразование текстовых запросов в фасетный поиск. К примеру, запрос 3х комнатная квартира в 5 минутах от метро должна преобразовать минуты в метры и задать варианты для фильтра и далее отобразить все релевантные объекты.
Нужен совет с:
1) оптимальным выбором БД:
MongoDb
MySql – характеристики объектов хранятся в json в отдельном поле
MySql – характеристики объектов хранятся в отдельной таблице.
2) выбор поискового движка (возможность учета характеристик родительских объектов, организация фасетного поиска)
Sphinx и ElasticSearch.
Реализовывал на MySQL + Sphinx. Фасетный поиск делается легко через MVA атрибуты. Поле с характеристиками объекта можно задать в JSON формате - в карточке объекта не придется делать лишний запрос на получение этих характеристик. Подробнее о фасетном поиске на сфинксе можно почитать тут.
mongodb/elasticsearch
Проще структура, просто делаете набор атрибутов ( кол-во комнат, координаты, и т.д). Дальше в elasticsearch и оттуда вытаскиваете facet/aggregation. Можно вообще сразу данные в elasticsearch хранить, а не только индекс.