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 или бинарном формате. Процесс включает:
- Разбор — извлечение текста из документов (поддерживаются PDF, Word, HTML, RTF и другие форматы через Tika).
- Анализ — токенизация, стемминг, удаление стоп-слов, нормализация (через цепочки анализаторов).
- Индексирование — запись в инвертированный индекс Lucene.
Поисковый процесс
При поисковом запросе Solr:
- Принимает запрос в формате HTTP GET с параметрами (q, fq, sort, start, rows).
- Парсит запрос через выбранный Query Parser (стандартный, DisMax, eDisMax).
- Выполняет поиск по индексу Lucene.
- Применяет фильтры, сортировку, фасеты, выделение фрагментов.
- Возвращает результаты в формате 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 Solr | Elasticsearch |
|---|---|---|
| Дата выхода | 2006 | 2010 |
| Основной протокол | HTTP/XML, JSON | HTTP/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 →