Исследовательский документ для выбора поисковых систем
Введение в Elasticsearch*
Elasticsearch — это распределённый поисковый и аналитический движок в реальном времени. Он помогает обрабатывать крупномасштабные данные быстрее, чем когда-либо.
Её можно использовать для полнотекстового поиска, структурированного поиска и аналитики, и, конечно, вы можете объединить все эти три направления.
Elasticsearch — это поисковая система, построенная на основе полнотекстовой поисковой системы Apache Lucene™, которую можно назвать самой продвинутой и эффективной полнофункциональной открытой поисковой системой, доступной сегодня.
Но Lucene — это всего лишь фреймворк, и чтобы полностью использовать его возможности, нужно использовать JAVA и интегрировать Lucene в свою программу. Нужно много учиться, чтобы понять, как это работает, а Люсен действительно сложна.
Elasticsearch использует Lucene как внутренний движок, но при полном поиске достаточно использовать единый API без понимания сложных принципов работы Lucene.
Конечно, Elasticsearch не так прост, как Lucene, он не только включает полнотекстовые функции поиска, но и может выполнять следующие задачи:
- Распределённое хранение файлов в реальном времени и индексирование каждого поля для их поиска.
- Распределённая поисковая система с аналитикой в реальном времени.
- Он может масштабироваться до сотен серверов для обработки петабайтов структурированных или неструктурированных данных.
С таким количеством функций, интегрированных на одном сервере, вы можете легко общаться с RESTful API ES через клиент или любой из предпочитаемых вами языков программирования.
Начать с Elasticsearch очень просто. В нём много разумных стандартных вариантов, что делает его хорошим способом для новичков избежать необходимости сталкиваться со сложными теориями сразу после начала.
Он установлен и готов к использованию, и может быть очень продуктивным при небольших затратах на обучение.
По мере изучения вы сможете воспользоваться более продвинутыми функциями Elasticsearch, а весь движок можно настраивать гибко. Вы можете настроить свой собственный Elasticsearch под свои нужды.
Сценарии использования:
- Википедия использует Elasticsearch для полнотекстового поиска и выделения ключевых слов, а также для поисковых советов, таких как поиск по типу и имел в виду.
- The Guardian использует Elasticsearch для обработки журналов посетителей, чтобы редакторы могли получать информацию о реакции общественности на разные статьи в реальном времени.
- StackOverflow сочетает полнотекстовый поиск с геолокацией и соответствующей информацией, чтобы представить вопросы, связанные с более похожими на это.
- GitHub использует Elasticsearch для получения более 130 миллиардов строк кода.
- Каждый день Goldman Sachs использует его для индексирования 5 ТБ данных, а многие инвестиционные банки используют его для анализа движений фондового рынка.
Но Elasticsearch предназначен не только для крупных предприятий, он также помог многим стартапам, таким как DataDog и Klout, расширить свои возможности.
Плюсы и минусы Elasticsearch**:
заслуга
- Elasticsearch распределён. Другие компоненты не требуются, а распределение осуществляется в реальном времени, что называется «push-репликацией».
- Elasticsearch полностью поддерживает поиск почти в реальном времени с помощью Apache Lucene.
- Обработка мультитенантности не требует специальной конфигурации, тогда как Solr требует более сложных настроек.
- Elasticsearch использует концепцию Gateway, чтобы упростить резервное копирование.
- Каждый узел образует равную структуру сети, и когда некоторые узлы выходят из строя, другие автоматически назначаются на их место.
недостаток
- Только один разработчик (текущая организация Elasticsearch на GitHub — это больше, у неё уже довольно активные сопровождающие)
- Недостаточно автоматически (не подходит для текущего нового API Index Warmup)
О Солре*
Solr (произносится как «солар») — это открытая корпоративная поисковая платформа для проекта Apache Lucene. Основные функции включают полнотекстовый поиск, маркировку попаданий, фасетный поиск, динамическую кластеризацию, интеграцию баз данных и обработку богатого текста (например, Word, PDF). Solr отличается высокой масштабируемостью и обеспечивает распределённый поиск и репликацию индексов. Solr — самая популярная корпоративная поисковая система, а Solr4 также поддерживает NoSQL.
Solr — это автономный полнотекстовый поисковый сервер, написанный на Java, который работает на серверном контейнере, таком как Apache Tomcat или Jetty. Solr использует библиотеку поиска Lucene Java в качестве основы для полнотекстовой индексации и поиска, а также имеет REST-подобные HTTP/XML и JSON API. Мощные внешние возможности конфигурации Solr позволяют легко адаптироваться к многим типам приложений без программирования на Java. У Solr есть архитектура плагинов для поддержки более продвинутой настройки.
В результате слияния проектов Apache Lucene и Apache Solr в 2010 году оба проекта были созданы и реализованы одной командой разработчиков Apache Software Foundation. Что касается технологий или продуктов, то Lucene/Solr или Solr/Lucene — это одно и то же.
Плюсы и минусы Solr:
заслуга
- У Solr более крупное и зрелое сообщество пользователей, разработчиков и участников.
- Поддержка добавления индексов в различных форматах, таких как HTML, PDF, программные форматы Microsoft Office и форматы простого текста, такие как JSON, XML, CSV и др.
- Солр относительно зрелый и стабильный.
- Поиск при индексации не учитывается, и скорость быстрее.
недостаток
- Когда индекс установлен, эффективность поиска снижается, а эффективность поиска в реальном времени не является высокой.
Elasticsearch против Solr*
Solr работает быстрее при простом поиске существующих данных.
При индексировании в реальном времени Solr вызывает блокировку ввода-вывода и плохую производительность запросов, что явное преимущество Elasticsearch.
По мере увеличения объёма данных эффективность поиска Solr снижается, тогда как Elasticsearch существенно не меняется.
В итоге, архитектура Solr не подходит для поиска в реальном времени.
Реальные производственные испытания*
На рисунке ниже показано увеличение средней скорости запросов в 50 раз после перехода с Solr на Elasticsearch.
Резюме сравнения Elasticsearch и Solr
- Обе легко устанавливаются;
- Solr использует Zookeeper для распределённого управления, а сам Elasticsearch предлагает распределённое управление оркестрацией;
- Solr поддерживает больше форматов данных, а Elasticsearch — только JSON-форматы;
- Solr официально предоставляет больше функций, в то время как сам Elasticsearch больше фокусируется на основных функциях, а расширенные функции в основном предоставляются сторонними плагинами.
- Solr превосходит Elasticsearch в традиционных поисковых приложениях, но значительно менее эффективен, чем Elasticsearch, при работе с поисковыми приложениями в реальном времени.
- Solr — мощное решение для традиционных поисковых приложений, но Elasticsearch лучше подходит для новых приложений в реальном времени поиска.
Другие решения для поисковых систем с открытым исходным кодом на базе Lucene*
1: Используйте Lucene напрямую
Примечание: Lucene — это библиотека поиска на Java, которая не является полноценным решением сама по себе и требует дополнительных усилий по разработке.
Преимущества: Зрелое решение с множеством успешных случаев. Apache проекты высшего уровня, которые продолжают быстро развиваться. Большое и активное сообщество разработчиков, большое количество застройщиков. Это просто библиотека классов с достаточным пространством для настройки и оптимизации: после простой настройки она может удовлетворить большинство распространённых потребностей; Оптимизировано для поддержки 1 миллиард+ поисковых запросов.
Минусы: Требуется дополнительная разработка. Вся масштабировка, распределение, надёжность и т.д. должны реализовываться самостоятельно; В нереальном времени существует временная задержка между индексацией и поиском, и масштабируемость текущей схемы поиска «Lucene Near Real Time search» требует дополнительного улучшения
Вход по гиперссылке виден.
2:Катта
Примечание: Распределённая схема поиска на основе Lucene — распределённая, масштабируемая, отказоустойчивая, почти в реальном времени.
Плюсы: распространяется из коробки с Hadoop. У него есть механизм масштабирования и отказоустойчивости.
Недостатки: это просто решение для поиска, и индексацию всё равно нужно реализовать самостоятельно. С точки зрения функции поиска реализуются только самые базовые потребности. Историй успеха меньше, а зрелость проекта немного ниже. Поскольку необходимо поддерживать распространение, будет сложно настроить его под некоторые сложные требования к запросам.
Вход по гиперссылке виден.
3:Hadoop вклад/индекс
Примечание: режим Map/Reduce — распределённое решение для индексации — может использоваться с Katta.
Преимущества: распределённая индексация и масштабируемость.
Недостатки: только схема индексирования, а не реализация поиска. Работает в пакетном режиме с плохой поддержкой поиска в реальном времени.
Вход по гиперссылке виден.
4: Открытое решение LinkedIn
Описание: Ряд решений на базе Lucene, включая Zoie для поиска почти в реальном времени, Bobo для фасетного поиска, Decomposer для алгоритмов машинного обучения, Krati для репозиториев резюме, Sensei для обёртки схем базы данных и многое другое
Преимущества: проверенное решение, поддерживающее распределённую, масштабируемую и богатую реализацию функций
Минусы: слишком тесная связь с компанией LinkedIn и плохая кастомизация
Вход по гиперссылке виден.
5: Лукандра
Примечание: На основе Lucene индекс существует в базе данных Cassandra
Плюсы: Обратите внимание на преимущества Кассандры
Минусы: Обратите внимание на недостатки Кассандры. Кроме того, это всего лишь демонстрация и не была подробно проверена
Вход по гиперссылке виден.
6:HBasene
Примечание: На основе Lucene индекс существует в базе данных HBase
Преимущества: Ознакомьтесь с преимуществами HBase
Недостатки: Обратите внимание на недостатки HBase. Кроме того, в реализации люценные термины хранятся как строки, а списки публикации, соответствующие каждому термину, хранятся в виде столбцов. По мере роста числа списков объявлений для одного срока скорость запроса будет сильно снижаться
Вход по гиперссылке виден.
7: Xunsearch
Примечание: Xunsearch использует структурированную иерархическую структуру, включающую бэкенд-сервисы и фронтенд-пакеты разработки, с чёткими иерархиями и без пересечений. Бэкенд — это демон, написанный на C/C++, а фронтенд использует PHP — самый популярный скриптовый язык, который удобнее для веб-поисковых проектов. Для подробностей см. раздел Архитектурный дизайн.
Вход по гиперссылке виден.
|