Elasticsearch Против Сфинкса

Каждый разработчик приложений рано или поздно сталкивается с таким важным вопросом, как выбор поисковой системы.

Можно сказать, что поисковая система — это сердце API и главный элемент системы доступности контента; благодаря этому поиск и фильтрация происходят во много раз быстрее, чем в реляционных базах данных.

Такие системы позволяют использовать множество полезных функций поиска.

Например, они учитывают морфологию языка, выполняют фасетный поиск, работают со стоп-словами, а также позволяют настраивать формулы определения релевантности документов.

Но на каком из них остановиться? В блогах разработчиков нет единого мнения.

Мы рассмотрим две популярные, но принципиально разные поисковые системы — Sphinx и Elasticsearch — и объясним, почему при разработке приложения ЯРУС мы выбрали первую и к чему это в конечном итоге привело.

Но сначала сделаем портрет каждого двигателя.



Elasticsearch против Сфинкса

Sphinx — полнотекстовая поисковая система.

Среди преимуществ — наличие лемматизаторов ru, en, du, большое количество индексирующих и поисковых стеммеров: полнотекстовых, фасетных, гео.

Ничего лишнего, просто поисковая система с быстрой индексацией и собственный индексатор.

При правильной настройке индексов RT можно добиться индексации в реальном времени.

В отличие от Elasticsearch мы наблюдаем умеренное использование памяти.

Что касается недостатков, то главный из них — необходимость самостоятельно рассчитывать всю структуру индекса, а значит масштабирование не так просто.

У системы также скудный API, нет возможностей визуализации, нет нечеткого поиска по умолчанию (но можно реализовать свой) и скудное сообщество.

Сфинкс написан на C++.

Его используют такие мастодонты, как Хабр, Wikimapia, Craigslist, поддерживает 1С-Битрикс.



Elasticsearch против Сфинкса

Теперь несколько слов об Elasticsearch. Поисковая система выполняет всю индексацию внутри себя и управляет индексами через RESTful API. Преимущества ElasticSearch — фасетный поиск, легкий и мощный API, большое количество стеммеров, гибкая структура индексов и создание индексов постфактум.

С методами поиска здесь тоже все в порядке: полнотекстовый поиск, а также алгоритмы Geo и Fuzzy. Elasticsearch также имеет множество готовых модулей для ES, имеет возможность хранения данных, индексацию в реальном времени, достаточно легко масштабируется, ETL-механизмы и, самое главное, обширное сообщество.

Elasticsearch написан на Java и используется Wikimedia, Mozilla, SoundCloud, GitHub и другими сайтами.

Что касается недостатков Elasticsearch, то к ним можно отнести отсутствие собственного индексатора (нужно реализовать свой или logstash в ELK), съедает много памяти, а лемматизаторы для русского текста устанавливаются отдельно в виде плагина.

Если бы нас попросили описать Sphinx и Elasticsearch одним выражением, мы бы описали первую поисковую систему словами «быстрая индексация», а вторую — «мощным API».



Elasticsearch против Сфинкса

При разработке приложения ЯРУС мы отдали предпочтение Sphinx. Требования к поиску были ниже, а поисковая система подкупила прозрачной настройкой индексов в виде файлов конфигурации и скоростью индексации.

Но в последнее время мы задумались о смене Sphinx на Elasticsearch. Давайте объясним почему.

Теперь запрос к API поиска проходит несколько этапов: сначала идет запрос к поисковой системе, после чего полученный результат поисковой системы пополняется данными из баз данных.

Мы хотели бы перестать вытаскивать базу данных (используя ее только как холодное хранилище) и предоставить готовую модель прямо из поисковой системы.

Elasticsearch (как мы писали ранее в плюсах) можно использовать в хранилище данных, поэтому ничто не мешает хранить нужные поля в Elastic. Кроме того, объём данных в приложении растёт, а управление поиском на Sphinx через конфигурационные файлы усложняется (нужно самому думать о шардах и репликах, раздавать свой конфиг на каждую ноду), поэтому необходимо упростить управление поиском (отдать все данные и управление индексами сервису).

Кроме того, нам нужна индексация в режиме, близком к реальному времени.

Что касается преимуществ, то мы изолировали разработчиков от сложного управления конфигурациями индексов типа Sphinx, а также использовали облачное решение (MCS), из-за чего про администрирование почти полностью забыли.

Надеемся, что наш опыт будет полезен другим разработчикам.

Теги: #Поисковые технологии #elasticsearch #sphinx #поисковые системы и технологии

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.