Открыть сервис

Apache Solr

Apache Solr — это высокопроизводительная платформа полнотекстового поиска с открытым исходным кодом, построенная на основе библиотеки Apache Lucene. Solr предоставляет возможности индексирования, поиска, фасетной навигации, кластеризации и анализа больших объёмов данных в реальном времени. Платформа написана на языке Java и распространяется под лицензией Apache 2.0.

История

Разработка Solr началась в 2004 году в компании CNET Networks. Первоначально проект создавался как внутреннее решение для поиска по сайту CNET. В 2006 году код был передан в инкубатор Apache Software Foundation, а в январе 2007 года Solr стал проектом верхнего уровня Apache.

В 2010 году вышла версия 1.4, которая представила поддержку поиска по нескольким ядрам (multicore). Версия 3.1 (2011 год) добавила интеграцию с Apache ZooKeeper для распределённой работы. В 2012 году Solr 4.0 представил SolrCloud — режим распределённого поиска с автоматической репликацией и шардированием. Версия 5.0 (2015 год) упростила установку, отказавшись от развёртывания в контейнерах сервлетов в пользу встроенного сервера Jetty. Версия 6.0 (2016 год) перешла на Java 8 и включила поддержку параллельного SQL-запроса. В 2017 году вышла версия 7.0, которая оптимизировала работу с памятью и улучшила производительность индексирования. Версия 8.0 (2019 год) представила новую архитектуру плагинов и модульность. Версия 9.0 (2022 год) перешла на Java 11 и добавила поддержку gRPC для межузлового взаимодействия.

Архитектура и принципы работы

Основные компоненты

Solr состоит из следующих ключевых элементов:

  • Ядро (Core) — логическая единица индекса, содержащая конфигурацию, схему и данные.
  • Коллекция (Collection) — группа ядер, объединённых в распределённую систему SolrCloud.
  • Шард (Shard) — часть коллекции, содержащая подмножество документов.
  • Реплика (Replica) — копия шарда для обеспечения отказоустойчивости.

Процесс индексирования

Solr получает документы через HTTP-запросы (POST, PUT) или через API. Документы могут быть в форматах XML, JSON, CSV или бинарном формате. Процесс включает:

  1. Разбор — извлечение текста из документов (поддерживаются PDF, Word, HTML, RTF и другие форматы через Tika).
  2. Анализтокенизация, стемминг, удаление стоп-слов, нормализация (через цепочки анализаторов).
  3. Индексированиезапись в инвертированный индекс Lucene.

Поисковый процесс

При поисковом запросе Solr:

  1. Принимает запрос в формате HTTP GET с параметрами (q, fq, sort, start, rows).
  2. Парсит запрос через выбранный Query Parser (стандартный, DisMax, eDisMax).
  3. Выполняет поиск по индексу Lucene.
  4. Применяет фильтры, сортировку, фасеты, выделение фрагментов.
  5. Возвращает результаты в формате JSON, XML, CSV, PHP, Ruby или Velocity.

Ключевые возможности

Полнотекстовый поиск

Solr поддерживает сложные запросы: логические операторы (AND, OR, NOT), поиск по фразе, нечёткий поиск, поиск по регулярным выражениям, поиск с учётом синонимов, поиск по подстановочным символам.

Фасетная навигация

Solr позволяет группировать результаты поиска по категориям (фасетам): полям, диапазонам дат, числовым интервалам, произвольным запросам. Фасеты вычисляются на лету и возвращаются вместе с результатами.

SolrCloud

Распределённый режим работы обеспечивает:

  • Автоматическое шардирование данных.
  • Репликацию для отказоустойчивости.
  • Балансировку нагрузки.
  • Автоматическое восстановление после сбоев узлов.
  • Поддержку ZooKeeper для координации.

Поддержка языков

Solr включает анализаторы для более чем 40 языков, включая русский, английский, немецкий, французский, китайский, арабский. Для русского языка используются стеммеры (Snowball, Porter) и морфологический анализатор.

Дополнительные возможности

  • Выделение фрагментов (Highlighting) — подсветка совпадений в результатах.
  • Кластеризация — группировка результатов по темам (через Carrot2).
  • Пространственный поиск — поиск по географическим координатам (через Spatial4j).
  • Скорость — поддержка near-real-time индексирования (задержка менее 1 секунды).
  • Безопасностьаутентификация (Basic Auth, Kerberos, LDAP) и авторизация на основе ролей.

Сравнение с Elasticsearch

Solr часто сравнивают с Elasticsearch, поскольку обе платформы основаны на Lucene. Основные различия:

ХарактеристикаApache SolrElasticsearch
Дата выхода20062010
Основной протоколHTTP/XML, JSONHTTP/JSON
РаспределённостьSolrCloud (с 4.0)Из коробки
ZooKeeperТребуетсяВстроен (с 7.x)
Поддержка SQLЧастично (Parallel SQL)Полноценная (Elasticsearch SQL)
ФасетыРазвитые с 1.0Добавлены позже
АналитикаОграниченнаяРазвитая (Elasticsearch Stack)
ПопулярностьНишеваяМассовая

Solr традиционно сильнее в фасетной навигации и сложных поисковых запросах, тогда как Elasticsearch — в аналитике и лог-менеджменте.

Применение

Solr используется в различных областях:

  • Веб-сайты — поиск по товарам, статьям, документам (например, CNET, Netflix, Instagram).
  • Корпоративные системы — поиск по внутренним документам, базам знаний, почтовым архивам.
  • Электронная коммерция — каталоги товаров с фасетной навигацией.
  • Научные проекты — поиск по публикациям, патентам, геномным данным.
  • Геоинформационные системы — поиск по координатам и радиусам.

Критика

Основные недостатки Solr:

  • Сложность настройки — требует глубокого понимания Lucene и конфигурации.
  • Отсутствие встроенной аналитики — для визуализации и анализа данных требуется интеграция с внешними инструментами.
  • Меньшая популярность — меньше сообщества, документации и готовых решений по сравнению с Elasticsearch.
  • Скорость изменений — новые функции добавляются медленнее, чем в коммерческих продуктах.

Интересные факты

  • Solr изначально расшифровывался как «Search On Lucene with Replication».
  • В 2015 году Solr и Elasticsearch объединили усилия в рамках проекта Lucene, но остались конкурентами.
  • Solr поддерживает индексацию до 1 миллиарда документов на одном узле (при достаточных ресурсах).
  • В 2022 году вышла версия 9.0, которая полностью отказалась от поддержки Java 8.

Источники

  • Apache Solr Reference Guide (официальная документация)
  • «Apache Solr: A Practical Approach to Enterprise Search» — D. Smiley, E. Pugh, K. Parisa
  • «Solr in Action» — T. Grainger, T. Potter
  • Apache Software Foundation — официальный сайт проекта
  • Статья «Apache Solr vs Elasticsearch» на DZone

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →