Solr против ElasticSearch

Каковы основные архитектурные различия между этими технологиями?

Кроме того, какие варианты использования обычно более подходят для каждого?

Ответ 1

Update

Теперь, когда область вопроса была исправлена, я могу добавить что-то в этом отношении:

Существует много сравнений между Apache Solr и ElasticSearch доступно, поэтому я расскажу о тех, кого я нашел наиболее полезными, т.е. охватывающих наиболее важные аспекты:

  • Боб Йоплайт уже связал кимчский ответ ElasticSearch, Sphinx, Lucene, Solr, Xapian. Что подходит для использования?, в котором излагаются причины, по которым он пошел дальше, и создал ElasticSearch, который, по его мнению, обеспечивает гораздо более высокую распределенную модель и удобство использования по сравнению с Solr.

  • Ryan Sonnek Поиск в реальном времени: Solr vs Elasticsearch обеспечивает проницательный анализ/сравнение и объясняет, почему он переключился с Solr на ElasticSeach, несмотря на будучи счастливым пользователем Solr - он суммирует это следующим образом:

    Solr может быть лучшим выбором при построении стандартного поиска приложений, но Elasticsearch переводит его на следующий уровень с помощью для создания современных приложений поиска в реальном времени. Перколяция - захватывающая и инновационная функция, которая односторонне удаляет Solr прямо из воды. Elasticsearch является масштабируемым, быстрым и мечта интегрироваться с. Адиос Солр, было приятно узнать тебя. [акцент мой]

  • Статья в Википедии об ElasticSearch цитирует comparison из известного немецкого журнала iX, перечисляя преимущества и недостатки, которые в значительной степени суммируйте сказанное выше:

    <сильные > Преимущества:

    • Распространяется ElasticSearch. Никакого отдельного проекта не требуется. Реплики также находятся в режиме реального времени, который называется "Push-репликация".
    • ElasticSearch полностью поддерживает поиск в реальном времени Apache Lucene.
    • Обработка многоуровневости не является специальной конфигурацией, где с Solr требуется более сложная настройка.
    • ElasticSearch представляет концепция шлюза, которая облегчает создание резервных копий.

    Недостатки

    • Только один главный разработчик [больше не применим в соответствии с текущей elasticsearch организацией GitHub, кроме того, база коммиттера в первую очередь]
    • Нет функции автосогласования [больше не применимо в соответствии с новым Index Warmup API]

Исходный ответ

Это совершенно разные технологии, предназначенные для совершенно разных вариантов использования, поэтому их нельзя сравнивать ни в каком значимом смысле:

  • Apache Solr - Apache Solr предлагает возможности Lucene в удобном и быстром поисковом сервере с дополнительные функции, такие как огранка, масштабируемость и многое другое

  • Amazon ElastiCache - Amazon ElastiCache - это веб-сервис, который упрощает развертывание, работу и масштабирование в -memory cache в облаке.

    • Обратите внимание, что Amazon ElastiCache совместим с протоколом Memcached, широко используемой системы кэширования объектов памяти, поэтому код, приложения и популярные инструменты, которые вы используете сегодня в существующих средах Memcached, будут работать без проблем с сервисом (см. Memcached).

[акцент мой]

Возможно, это так или иначе запуталось со следующими двумя связанными технологиями:

  • ElasticSearch - это Open Source (Apache 2), Distributed, RESTful, поисковая система, построенная поверх Apache Lucene.

  • Amazon CloudSearch - Amazon CloudSearch - это полностью управляемая служба поиска в облаке, которая позволяет клиентам легко интегрировать быстрые и масштабируемые функции поиска в свои приложения.

Предложения Solr и ElasticSearch кажутся похожими на первый взгляд, и оба используют одну и ту же бэкэнд-поисковую систему, а именно Apache Lucene.

В то время как Solr старше, довольно разносторонний и зрелый и широко используемый, ElasticSearch был разработан специально для устранения недостатков Solr с требованиями к масштабируемости в современных облачных средах, которые трудно адресовать с помощью Solr.

Как таковой, было бы наиболее полезно сравнить ElasticSearch с недавно введенным Amazon CloudSearch (см. вводный пост Начать поиск за один час менее чем за $100/Месяц), поскольку оба претендуют на то, чтобы в принципе использовать одни и те же варианты использования.

Ответ 2

Я вижу, что некоторые из вышеперечисленных ответов сейчас немного устарели. С моей точки зрения, и я ежедневно работаю с Solr (Cloud and non-Cloud) и ElasticSearch, вот некоторые интересные отличия:

  • Сообщество: у Solr есть более крупный, более зрелый пользователь, разработчик и сообщество разработчиков. ES имеет меньшее, но активное сообщество пользователей и растущее сообщество участников.
  • Срок погашения: Solr более зрелый, но ES быстро растет, и я считаю его стабильным.
  • Производительность: трудно судить. Мы не проводили прямых тестов производительности. Лицо LinkedIn сравнивало Solr vs. ES с Sensei один раз, но исходные результаты следует игнорировать, поскольку они использовали не экспертную настройку для Solr и ES.
  • Дизайн: Люди любят Solr. API Java несколько подробный, но людям нравится, как он складывается. Код Solr, к сожалению, не всегда очень красив. Кроме того, ES имеет осколки, репликацию в реальном времени, встроенную документацию и маршрутизацию. Хотя некоторые из них существуют и в Solr, он чувствует себя немного как последующий.
  • Поддержка: есть компании, предоставляющие техническую и консультационную поддержку для Solr и ElasticSearch. Я думаю, что единственная компания, предоставляющая поддержку для обоих, - это Sematext (раскрытие: основатель Sememxt).
  • Масштабируемость: оба могут быть масштабированы до очень больших кластеров. ES легче масштабировать, чем версия Solr версии 4.0 Solr, но с Solr 4.0, которая больше не подходит.

Для более полного освещения темы Solr vs. ElasticSearch рассмотрите http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/. Это первое сообщение в серии сообщений от Sematext, где делается прямая и нейтральная сопоставление Solr vs. ElasticSearch. Раскрытие информации: я работаю в Sematext.

Ответ 3

Я вижу, что многие люди здесь ответили на этот вопрос ElasticSearch vs Solr с точки зрения возможностей и функциональности, но я не вижу здесь много обсуждения (или в другом месте) относительно того, как они сравниваются с точки зрения производительности.

Вот почему я решил провести собственное исследование . Я взял уже закодированную гетерогенную микросхему источника данных, которая уже использовала Solr для поиска по срокам. Я отключил Solr для ElasticSearch, тогда я запустил обе версии на AWS с уже закодированным приложением для тестирования нагрузки и зафиксировал метрики производительности для последующего анализа.

Вот что я нашел. ElasticSearch имел на 13% большую пропускную способность, когда дело доходило до индексирования документов, но Solr был в десять раз быстрее. Когда дело дошло до запросов на документы, Solr имел в пять раз большую пропускную способность и был в пять раз быстрее, чем ElasticSearch.

Ответ 4

Я работаю над solr и эластичным поиском приложений .Net. Основное отличие, с которым я столкнулся, -

Эластичный поиск:

  • Больше кода и меньше конфигурации, однако есть api для изменения но все же это изменение кода.
  • для сложных типов, тип внутри типов i.e вложенных типов (не удалось достичь в solr)

Solr:

  • меньше кода и больше конфигурации и, следовательно, меньше обслуживания
  • для группировки результатов во время запросов (много работы для достижения эластичный поиск короче нет прямого пути)

Ответ 5

С длинной историей Apache Solr, я думаю, что одна сила Solr - это экосистема. Существует много плагинов Solr для различных типов данных и целей.

solr stack

Поиск платформы в следующих слоях снизу вверх:

  • Данные
    • Назначение: представление различных типов данных и источников
  • Здание документа
    • Назначение: сбор информации документа для индексирования
  • Индексирование и поиск
    • Назначение: создание и запрос индекса документа
  • Улучшение логики
    • Назначение: дополнительная логика для обработки поисковых запросов и результатов
  • Служба поисковой платформы
    • Назначение: добавьте дополнительные функциональные возможности ядра поисковой системы для предоставления сервисной платформы.
  • Приложение пользовательского интерфейса
    • Цель: интерфейс или приложения для поиска конечных пользователей.

Справочная статья: Поиск предприятия

Ответ 6

Я создал таблицу основных различий между elasticsearch и Solr и splunk, вы можете использовать ее как обновление 2016: введите описание изображения здесь

Ответ 7

Несмотря на то, что все вышеупомянутые ссылки заслуживают внимания и в прошлом мне очень помогли, так как лингвист "подвергался" различным поисковым машинам Lucene за последние 15 лет, я должен сказать, что разработка эластичного поиска очень быстро в Python. При этом некоторые из кодов чувствовали себя неинтуитивными для меня. Итак, я обратился к одному компоненту стека ELK Kibana с точки зрения с открытым исходным кодом и обнаружил, что в Kibana я могу с легкостью создать несколько загадочный код elasticsearch. Кроме того, я мог бы запросить запросы Chrome Sense в Kibana. Если вы используете Kibana для оценки es, это еще больше ускорит вашу оценку. То, что заняло несколько часов, чтобы работать на других платформах, работало в JSON in Sense поверх elasticsearch (интерфейс RESTful) за несколько минут в худшем случае (самые большие наборы данных); в секундах в лучшем случае. Документация для поиска elasticsearch, а также более 700 страниц, не отвечала на мои вопросы, которые обычно решались в документации SOLR или другой Lucene, что, очевидно, занимало больше времени для анализа. Кроме того, вы можете захотеть взглянуть на Агрегаты в эластичном поиске, которые вывели Faceting на новый уровень.

Большая картинка: если вы занимаетесь наукой о данных, текстовой аналитикой или вычислительной лингвистикой, у elasticsearch есть некоторые алгоритмы ранжирования, которые, похоже, хорошо внедряются в область поиска информации. Если вы используете любые алгоритмы TF/IDF, частоту текста/обратную частоту документов, elasticsearch расширяет этот алгоритм 1960 года до нового уровня, даже используя BM25, Best Match 25 и другие алгоритмы ранжирования ранжирования. Итак, если вы забиваете или ранжируете слова, фразы или предложения, elasticsearch делает этот выигрыш "на лету", без больших накладных расходов на другие подходы к анализу данных, которые занимают часы - еще одна экономия времени elasticsearch. С помощью es, объединив некоторые из сильных сторон bucketing из агрегатов с оценкой релевантности и ранжированием данных в реальном времени JSON, вы можете найти выигрышную комбинацию, в зависимости от вашего гибкого (истории) или архитектурного (использования) подхода.

Примечание. Проанализировалось аналогичное обсуждение вышеперечисленных агрегатов, но не по скобкам и подсчетам релевантности - извинения за любое перекрытие. Раскрытие информации: Я не работаю на эластичность и не буду в состоянии в ближайшем будущем извлечь выгоду из их превосходной работы из-за другого архитектурного пути, если я не сделаю какую-то благотворительную работу с elasticsearch, что не будет плохой идеей

Ответ 8

У меня есть Elasticsearch в течение 3 лет и Solr в течение месяца, я чувствую, что кластер elasticsearch довольно прост в установке по сравнению с установкой Solr. У Elasticsearch есть сводный справочный документ с большим объяснением. Один из вариантов использования я застрял в Aggregation гистограмме, который был доступен в ES, но не найден в Solr.

Ответ 9

Если вы уже используете SOLR, продолжайте придерживаться его. Если вы запустите, пойдите для поиска Elastic.

Максимальные основные проблемы были исправлены в SOLR и довольно зрелые.

Ответ 10

Я использую только Elastic-search. Поскольку я нашел solr, очень сложно начать. Упругие функции поиска:

  • Простота запуска, очень мало настроек. Даже новичок может настроить кластер поэтапно.
  • Simple Restful API, который использует запрос NoSQL. И многие языковые библиотеки для легкого доступа.
  • Хороший документ, вы можете прочитать книгу:. На официальном сайте есть веб-версия.

Ответ 11

Добавить вложенный файл в solr очень сложный и вложенный поиск данных также очень сложный. но Elastic Search легко добавить вложенный документ и выполнить поиск

Ответ 12

Представьте пример использования:

  • Много (100+) небольших индексов поиска (10Mb-100Mb, 1000-100000 документов).
  • Они используют множество приложений (микросервисов)
  • Каждое приложение может использовать более одного индекса
  • Небольшой размерный индекс, да. Но огромная нагрузка (сотни запросов поиска в секунду) и запросы сложны (множественные агрегации, условия и т.д.).
  • Время простоя не разрешено
  • Все это работает много лет и постоянно растет.

Идея иметь отдельный экземпляр ES для каждого индекса - это огромные накладные расходы в этом случае.

Основываясь на моем опыте, такой вариант использования очень сложно поддерживать с помощью Elasticsearch.

Почему?

FIRST.

Основная проблема - принципиальное игнорирование обратной совместимости.

Ломающиеся изменения настолько круты! (Примечание: представьте себе SQL-сервер, который потребует от вас небольших изменений во всех ваших SQL-операторах, когда он обновлен... не может себе это представить, но для ES это нормально)

Отступления, которые упадут в следующем выпуске, настолько сексуальны! (Примечание: вы знаете, Java содержит некоторые изъяны, которые старше 20 лет, но все еще работают в реальной версии Java...)

И не только это, иногда у вас даже есть что-то, что нигде не задокументировано (лично натолкнулось только один раз, но...)

Итак. Если вы хотите обновить ES (потому что вам нужны новые функции для какого-либо приложения или вы хотите получить исправления ошибок), вы находитесь в аду. Особенно, если речь идет о основном обновлении версии.

Клиентский API не будет обратно совместим. Установки индекса не будут совместимы. И обновление всех приложений/сервисов в тот же момент с обновлением ES нереалистично.

Но вы должны делать это время от времени. Нет другого способа.

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

Чтобы жить с этим, вам нужно постоянно вкладывать много энергии в... передовую совместимость ваших приложений/сервисов с будущими версиями ES. Или вам нужно построить (и в любом случае постоянно поддерживать) какое-то промежуточное ПО между вашими приложениями/услугами и ES, которые предоставляют вам совместимый клиентский API. (И вы не можете использовать Transport Client (потому что для обновления любой младшей версии ES требуется обновление jar), и этот факт не упрощает вашу жизнь)

Это выглядит просто и дешево? Нет, нет. Отнюдь не. Непрерывное обслуживание сложной инфраструктуры, основанной на ES, является дорогой во всех возможных смыслах.

ВТОРАЯ. Простой API? Ну... нет. Когда вы действительно используете сложные условия и агрегации... JSON-запрос с 5 вложенными уровнями - это что угодно, но не просто.


К сожалению, у меня нет опыта работы с SOLR, я ничего не могу сказать об этом.

Но Sphinxsearch намного лучше этого сценария, потому что полностью совместимый с SphinxQL совместимый.

Примечание: Sphinxsearch/Manticore действительно интересны. Это не базирующаяся на Люсине, а как результат - совсем другое. Содержит несколько уникальных функций из коробки, которые ES не имеют и сумасшедшие быстро с индексами малого/среднего размера.