Я рассматриваю различные варианты выбора поискового сервера для проекта, в котором я участвую. Этот поисковый сервер используется для отображения результатов на веб-сайте знакомств, построенном в Rails, в котором поиск предоставляет все возможности поиска совпадений. «-magic.
Типичные запросы включают ранжирование документов / результатов с использованием выражения (в псевдокоде):
- Сортировка по рейтингу:
- + 50, если атрибут has_image имеет значение true
- + 10, если атрибут has_boost имеет значение true
- + 50, если широта / долгота находятся в пределах 40 миль от [точки]
- + 20, если широта / долгота находятся в пределах 80 миль [точка]
- - (расстояние от атрибута age до 30)
- Фильтровать по:
- Атрибут «возраст» между 25 и 35
- Атрибут «пол» равен «мужской»
По умолчанию мне не нужны полнотекстовые функции большинства поисковых серверов, и мне не нужно извлекать полные документы - просто уникальный идентификатор.
Природа проекта дает поисковому серверу со следующими свойствами:
- Spartial рейтинга
- Ранжирование результатов на основе пользовательской функции
- Фильтры атрибутов
- Масштабируемый и быстрый
- Free
Я нашел Sphinx, Solr и ElasticSearch, но все они (насколько я вижу) построены и оптимизированы для полнотекстового поиска, причем ES и Solr построены на Lucene, и я не знаю, что лучше всего подойдет для интенсивного поиска по фильтру / атрибуту.
Мои вопросы:
- Какой из этих серверов вы бы предпочли и почему?
- Я пропустил какие-либо другие очевидные варианты?