Каждый разработчик приложений рано или поздно сталкивается с таким важным вопросом, как выбор поисковой системы.
Можно сказать, что поисковая система — это сердце API и главный элемент системы доступности контента; благодаря этому поиск и фильтрация происходят во много раз быстрее, чем в реляционных базах данных.
Такие системы позволяют использовать множество полезных функций поиска.
Например, они учитывают морфологию языка, выполняют фасетный поиск, работают со стоп-словами, а также позволяют настраивать формулы определения релевантности документов.
Но на каком из них остановиться? В блогах разработчиков нет единого мнения.
Мы рассмотрим две популярные, но принципиально разные поисковые системы — Sphinx и Elasticsearch — и объясним, почему при разработке приложения ЯРУС мы выбрали первую и к чему это в конечном итоге привело.
Но сначала сделаем портрет каждого двигателя.
Sphinx — полнотекстовая поисковая система.
Среди преимуществ — наличие лемматизаторов ru, en, du, большое количество индексирующих и поисковых стеммеров: полнотекстовых, фасетных, гео.
Ничего лишнего, просто поисковая система с быстрой индексацией и собственный индексатор.
При правильной настройке индексов RT можно добиться индексации в реальном времени.
В отличие от Elasticsearch мы наблюдаем умеренное использование памяти.
Что касается недостатков, то главный из них — необходимость самостоятельно рассчитывать всю структуру индекса, а значит масштабирование не так просто.
У системы также скудный API, нет возможностей визуализации, нет нечеткого поиска по умолчанию (но можно реализовать свой) и скудное сообщество.
Сфинкс написан на C++.
Его используют такие мастодонты, как Хабр, Wikimapia, Craigslist, поддерживает 1С-Битрикс.
Теперь несколько слов об Elasticsearch. Поисковая система выполняет всю индексацию внутри себя и управляет индексами через RESTful API. Преимущества ElasticSearch — фасетный поиск, легкий и мощный API, большое количество стеммеров, гибкая структура индексов и создание индексов постфактум.
С методами поиска здесь тоже все в порядке: полнотекстовый поиск, а также алгоритмы Geo и Fuzzy. Elasticsearch также имеет множество готовых модулей для ES, имеет возможность хранения данных, индексацию в реальном времени, достаточно легко масштабируется, ETL-механизмы и, самое главное, обширное сообщество.
Elasticsearch написан на Java и используется Wikimedia, Mozilla, SoundCloud, GitHub и другими сайтами.
Что касается недостатков Elasticsearch, то к ним можно отнести отсутствие собственного индексатора (нужно реализовать свой или logstash в ELK), съедает много памяти, а лемматизаторы для русского текста устанавливаются отдельно в виде плагина.
Если бы нас попросили описать Sphinx и Elasticsearch одним выражением, мы бы описали первую поисковую систему словами «быстрая индексация», а вторую — «мощным API».
При разработке приложения ЯРУС мы отдали предпочтение Sphinx. Требования к поиску были ниже, а поисковая система подкупила прозрачной настройкой индексов в виде файлов конфигурации и скоростью индексации.
Но в последнее время мы задумались о смене Sphinx на Elasticsearch. Давайте объясним почему.
Теперь запрос к API поиска проходит несколько этапов: сначала идет запрос к поисковой системе, после чего полученный результат поисковой системы пополняется данными из баз данных.
Мы хотели бы перестать вытаскивать базу данных (используя ее только как холодное хранилище) и предоставить готовую модель прямо из поисковой системы.
Elasticsearch (как мы писали ранее в плюсах) можно использовать в хранилище данных, поэтому ничто не мешает хранить нужные поля в Elastic. Кроме того, объём данных в приложении растёт, а управление поиском на Sphinx через конфигурационные файлы усложняется (нужно самому думать о шардах и репликах, раздавать свой конфиг на каждую ноду), поэтому необходимо упростить управление поиском (отдать все данные и управление индексами сервису).
Кроме того, нам нужна индексация в режиме, близком к реальному времени.
Что касается преимуществ, то мы изолировали разработчиков от сложного управления конфигурациями индексов типа Sphinx, а также использовали облачное решение (MCS), из-за чего про администрирование почти полностью забыли.
Надеемся, что наш опыт будет полезен другим разработчикам.
Теги: #Поисковые технологии #elasticsearch #sphinx #поисковые системы и технологии
-
Берегите Свои Деньги
19 Oct, 24 -
Приглашаем Вас На Geekfest Night 26 Июля.
19 Oct, 24 -
Гонка 2.0
19 Oct, 24 -
Коротко О Crm. Рубрика «Я Не Могу Молчать»
19 Oct, 24 -
Обновление Интерфейса Gmail
19 Oct, 24 -
Xp: Без Ума
19 Oct, 24