Пример Apache Solr Hello World

Пример Apache Solr Hello World

apache solr logo

Apache Solr - это сервер Enterprise Real-time Search and Analytics Engine на основе REST-API с открытым исходным кодом от Apache Software Foundation. Его основная функция поиска построена с использованием Apache Lucene Framework и дополнена некоторыми дополнительными и полезными функциями. Он написан на языке Java.

SOLR означает «Поиск в Lucene с репликацией». Основные функции - индексирование и поиск. Как иElasticSearch, это также хранилище данных NoSQL на основе документов.

Note
Это официальный сайт:http://lucene.apache.org/solr/. Последняя версия Solr - 6.4.2, выпущенная 7 марта 2017 года.

Возможности Apache Solr: -

  • Открытый исходный код

  • Поддерживает полнотекстовый поиск и функцию фасетной навигации

  • Подсветка хита

  • Соответствующие результаты

  • Для индексации документов использует обратный индекс Apache Lucene.

  • Поддерживает рекомендации и варианты написания

  • Поддерживает автозаполнение

  • Поддерживает гео-пространственный поиск

  • Поддерживает API на основе REST (JSON через HTTP)

  • Поддерживает поиск в реальном времени и аналитику

  • Последняя версия Solr (версия 5.x или более поздняя) поддерживает технологии Distributed и Colud.

  • Как написано, он поддерживает кроссплатформенную функцию.

  • Встроенная система безопасности для аутентификации и авторизации

  • Поддерживает потоковую передачу

Преимущества или преимущества Apache Solr: -

  • Открытый исходный код

  • Имеет очень полезный административный интерфейс.

  • Легкость с REST API

  • Это очень быстрая, простая, мощная и гибкая поисковая система.

  • В отличие от ElasticSearch, он поддерживает не только формат JSON, но и другие полезные форматы: XML, PHP, Ruby, Python, XSLT, Velocity и пользовательские двоичные форматы вывода Java через HTTP.

  • Высокая доступность. Легко и хорошо масштабируется. Устойчивая, отказоустойчивая и надежная поисковая система.

  • Схема бесплатного хранилища данных. Однако при необходимости мы можем создать схему для поддержки наших данных.

  • Высокая производительность поиска благодаря инвертированному индексу Apache Lucene.

  • Поддерживает как структурированные, так и неструктурированные данные

  • Поддерживает распределенную архитектуру, сегментирование, репликацию, кластеризацию и многоузловую архитектуру.

  • Поддерживает массовые операции

  • Легко расширяется с помощью новых плагинов

  • Поддерживает кеширование данных

  • Полезно для сред BigData

  • В отличие от ElasticSearch, поддерживает алгоритм MapReduce.

Недостатки или ограничения Apache Solr: -

  • Не используется в качестве основного хранилища данных. Используется только в качестве вторичного хранилища данных.

  • Не совместимое с ACID хранилище данных

  • Не поддерживает транзакции и распределенные транзакции

  • НЕ поддерживает объединения и сложные запросы

  • НЕ полезно работать с нормализованными данными

Популярные клиенты, использующие Apache Solr: -

  • CNET, Кругле, М ТВ

  • Flipkart.com, Sourceforge.net, guardian.co.uk

  • eBay, Digg

  • Instagram

  • AT&T Interactive

  • Голдман Сакс

  • AOL Music, AOL Travel, AOL YellowPages

  • Дисней

  • Apple, Inc.

  • Больше клиентов обращаются к этомуlink

Популярные дистрибутивы Hadoop, такие как Cloudera, Hortonworks и MapR, используют Apache Solr внутри для поддержки функций поиска.

Note
Как известно, Apache Solr написан на Java. Итак, у нас должен быть Java / JRE в нашем системном пути для его использования. Пожалуйста, установите и настройте Java Environment должным образом. Apache Solr 5.x требует Java 7 или новее. Apache 6.x требует Java 8 или новее.

Мы можем использовать Apache Solr в двух вариантах:

  • Автономный сервер Apache Solr

  • Облачный и распределенный сервер Apached Solr

В этом руководстве мы собираемся использовать автономныеApache Solr Server v6.4.2, чтобы продемонстрировать наши примеры.

Note
В начальных версиях Apache Solr не поддерживает функцию Colud. Начиная с выпуска Apache Solr 4.0 и далее он поддерживает облако с помощью компонента SolrCloud.

1. Установить Apache Solr локально

Выполните следующие действия, чтобы настроить автономный сервер Apache Solr локально в среде Windows, Linux (например, Ubuntu) или Mac OS.

Note
Чтобы загрузить последнюю версию Apache Solr, обратитесь к этомуofficial download link

1.1 Windows Environment

  • Загрузите последнюю версию Apache Solr

  • Распаковать zip-файл в локальную файловую систему

  • Установить переменные среды

PATH=${SOLR_HOME}\bin

1.2 Linux or Mac Environment

  • Загрузите последнюю версию Apache Solr

  • Извлечь zip-файл

$ tar -xvf solr-6.4.2.tgz

Установить переменные среды

Предположим, чтоSOLR_HOME=/home/rambabu/solr-6.4.2

export PATH=${SOLR_HOME}\bin

Теперь мы успешно установили Apache Solr.

2. Start/Stop Apache Solr Locally

Некоторые команды для управления сервером Apache Solr.

2.1 Check Status of Apache Solr
Перед запуском сервера Solr выполните следующую команду «status», чтобы узнать статус.

cd solr-6.4.2
$ ./solr status

No Solr nodes are running.

2.2 Start Apache Solr

$ ./solr start
Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived
Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived
Rotating solr logs, keeping a max of 9 generations
Waiting up to 180 seconds to see Solr running on port 8983 [\]
Started Solr server on port 8983 (pid=24563). Happy searching!

Если мы рассмотрим приведенные выше журналы команд запуска, мы сможем понять, что сервер Apache Solr запускается с номером порта по умолчанию: 8983. Теперь снова выполните команду «status», чтобы узнать статус сервера.

$ ./solr status

Found 1 Solr nodes:

Solr process 24563 running on port 8983
{
  "solr_home":"/home/rambabu/solr-6.4.2/server/solr",
  "version":"6.4.2 34a975ca3d4bd7fa121340e5bcbf165929e0542f - ishan - 2017-03-01 23:30:23",
  "startTime":"2017-03-22T15:11:30.804Z",
  "uptime":"0 days, 0 hours, 5 minutes, 10 seconds",
  "memory":"35.3 MB (%7.2) of 490.7 MB"}

Запустите Apache Solr с другим номером порта

$ ./solr start –p 9000

2.3 Stop Apache Solr
Используйте команду «стоп» для остановки сервера

$ ./solr stop

Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 24563 to stop gracefully.

2.4 Restart Apache Solr

$ ./solr restart

Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 19442 to stop gracefully.
Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived
Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived
Rotating solr logs, keeping a max of 9 generations
Waiting up to 180 seconds to see Solr running on port 8983 [\]
Started Solr server on port 8983 (pid=19691). Happy searching!

Note
Поскольку в этом руководстве я собираюсь использовать ОС Linux (Ubuntu), я использовал такие команды, как./solr start. Если вы используете ОС Windows, используйте jsutsolr start.

3. Терминология Apache Solr

Мы обсудим несколько важных терминов ElasticSearch:Solr Core,Solr Core,Indexing,Document,Field и т. Д.

3.1 What is a Solr Instance?
В Apache Solr экземпляр Solr - это экземпляр Solr, запущенный в JVM. В автономном режиме Solr содержит только один экземпляр, тогда как в облачном режиме он содержит один или несколько экземпляров.

3.2 What is a Solr Core?
В Apache Solr ядро ​​Solr также известно как просто «Ядро». Ядро - это указатель текстов и полей, доступных во всех документах. Один экземпляр Solr может содержать одно или несколько ядер Solr.
Другими словами, ядро ​​Solr = экземпляр Apache Lucene Index + конфигурация Solr (solr.xml, solrconfig.xml и т. Д.)

PS: - Apache Solr использует следующие важные файлы конфигурации:

  • solr.xml

  • solrconfig.xml

  • core.properties

Если вы хотите поэкспериментировать с Apache Solr как с архитектурой на основе Schama, обратитесь к документации Apache Solr.

3.3 What is Indexing?
В Apache Lucene или Solr индексирование - это метод добавления содержимого документа в Solr Index, чтобы мы могли легко их искать. Apache Solr использует технику инвертированного индекса Apache Lucene для индексирования своих документов. Вот почему Solr предоставляет возможность очень быстрого поиска.

3.4 What is a Document?
В Apache Solr документ - это группа полей и их значений. Документы - это основная единица данных, которые мы храним в Apache Cores. Одно ядро ​​может содержать один или несколько документов.

3.5 What is a Field?
В Apache Solr поле - это фактические данные, хранящиеся в документе. Это пара ключ-значение. Ключ указывает имя поля, а значение содержит данные этого поля. Один документ может содержать одно или несколько полей. Apache Solr использует данные этого поля для индексации содержимого документа.

Apache Solr Architecture

Важно помнить:

  • В автономной архитектуре Apache Solr есть только один экземпляр Solr, тогда как в облачной архитектуре Solr их больше.

  • Apache Solr использует технологию SolrCloud для поддержки облачной архитектуры.

  • Каждый экземпляр Solr может иметь ноль или более ядер.

  • Каждое ядро ​​может содержать ноль или более документов.

  • Каждый документ может содержать ноль или более полей.

  • Каждый файл содержит пару «ключ: значение». Ключ - это имя файла, а значение - это данные поля.

Note
Поскольку это руководство предназначено только для автономного режима Apache Solr, мы не обсуждаем терминологию SolrCloud.

4. Консоль администратора Apache Solr

В отличие от ElasticSearch, Apache Solr имеет веб-интерфейс или консоль администратора. Это одно из преимуществ Apache Solr. Администраторам и программистам Solr полезно просматривать детали конфигурации Solr, запускать запросы и анализировать поля документа, чтобы точно настроить конфигурацию Solr и т. Д.

После запуска Apache Solr мы можем получить доступ к его консоли администратора, используя:http://localhost:8983/solr/

Apache Solr Admin Console

Как показано на диаграмме выше, изначально Apache Solr НЕ имеет ядер, поэтому на левой боковой панели отображается сообщение «Нет доступных ядер».

Мы можем использовать эту консоль администратора:

  • Создание, обновление, удаление (выгрузка) и просмотр ядер

  • Создание, обновление, удаление и просмотр документов

  • Конфигурации Apache Solr

  • Информация о регистрации

  • Информация о мониторинге

5. Создать «helloworld» Apache Solr Core

Мы можем выполнять операции Apache Solr, такие как CRUD в Apache Core или CRUD в Doucment или Field, используя следующие способы:

  • Команды Apache Solr

  • Консоль администратора

  • REST API

  • Команда CURL

Во-первых, давайте обсудим, как создавать Core использует команды и просматривать их в консоли администратора.

Перед выполнением этих команд запустите Apache Solr с помощью команды «solr start». Мы можем использовать команду «create» для создания ядра Apache, как показано ниже:

Создать синтаксис команды: -

$ ./solr create -c 

Здесь команда «create» используется для создания ядра, а опция «-c» указывает имя ядра Solr.

Создать команду Пример: -

$ ./solr create -c helloworld

Copying configuration to new core instance directory:
/home/rambabu/solr-6.4.2/server/solr/helloworld

Creating new core 'helloworld' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld

{
  "responseHeader":{
    "status":0,
    "QTime":1636},
  "core":"helloworld"}

Если мы посмотрим на вывод выше, мы сможем понять, что ядро ​​«helloworld» создано успешно. Даже мы можем увидеть следующий URL-адрес REST API в этом выводе для создания ядра «helloworld».

http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld

Здесь параметр запроса «действие» указывает операцию «СОЗДАТЬ», а имя определяет имя ядра, а instanceDir указывает имя каталога. Мы можем использовать как name, так и instanceDir, одинаковые или разные.

После выполнения этой команды, если мы обновим консоль администратора, мы не увидим «Нет доступных ядер» на левой боковой панели. Теперь вы можете увидеть опцию «Core Selector». Если мы щелкнем по нему, в раскрывающемся списке отобразится ядро ​​«helloworld». Если вы выберете это ядро, вся информация отобразится на левой боковой панели. Он также отображает другую опцию чуть ниже в этом раскрывающемся списке:

  • обзор

  • документы

  • запрос

Он также создает папку helloworld в${SOLR_HOME}/server/solr/, как показано ниже:

image

Чтобы создать Apache Core с нужным именем папки

Создать команду Пример: -

$ ./solr create -c helloworld -d myhellowolrd

Здесь создается наше ядро ​​«helloworld» с именем папки «myhellowolrd».

6. Add/Update/Import Documents to Core

Поскольку мы только что создали ядро ​​«helloworld», оно пусто. Не содержит документов или данных. Мы можем использовать опцию «Документы» консоли администратора Apache Solr для добавления / обновления / импорта документов в это ядро.

Мы можем добавлять документы, используя Контент напрямую в различных форматах, таких как JSON, XML, двоичный и т. Д., Или используя опцию FileUpload для непосредственной загрузки файлов как документов.

Добавить файлы в ядро ​​«helloworld»

  • Доступ к консоли администратора Solr:http://localhost:8983/solr/

  • Нажмите на опцию «Core Selector» и выберите ядро ​​«helloworld» в раскрывающемся списке.

  • Нажмите на опцию «Документы».

  • Обратите внимание на «Обработчик запросов», он показывает «/ update», что означает, что мы собираемся обновить ядро ​​документами.

  • В документе (-ах) нажмите «Выбрать файл».

  • Выберите «movies.json» из $ {SOLR_HOME} / example / movies /.

  • Нажмите кнопку «Отправить документ».

image

Он создает документ с доступными данными в файлеfilms.json. Мы можем сделать то же самое, используя xml, csv и т. Д. файлы.

7. Запросить документы из ядра

Мы можем использовать REST API или консоль администратора для запроса документов из ядра Apache.

Давайте теперь исследуем это с помощью консоли администратора Apache.

  • Доступ к консоли администратора Solr:http://localhost:8983/solr/

  • Нажмите на опцию «Core Selector» и выберите ядро ​​«helloworld» в раскрывающемся списке.

  • Нажмите «Запрос» на левой боковой панели.

  • Обратите внимание на «Обработчик запросов», он показывает «/ select», что означает, что мы собираемся выбрать или получить документы из Core.

  • Нажмите кнопку «Выполнить запрос» на правой панели.

  • Он извлекает все доступные документы из ядра «helloworld».

image

Вы можете получить доступ к тем же результатам, используя следующий вызов REST API. Вы увидите такие же результаты в браузере или REST-клиенте.

http://localhost:8983/solr/helloworld/select?indent=on&q=*:*&wt=json

Здесь «q» представляет «параметры запроса для фильтрации данных. Он использует синтаксис «q = Имя поля: Значение». Здесь «q =:» означает запросить все. «Wt» означает «тип писателя» или «тип ответа».
Теперь давайте сделаем запрос с некоторыми параметрами фильтрации. Вы можете получить доступ к этому REST API из веб-браузера или любых клиентов REST, таких как POSTMAN, Sense, Fidler и т. Д.

http://localhost:8983/solr/helloworld/select?indent=on&q=directed_by:"Gary Lennon"&wt=json

image

Здесь мы получили все данные из документа Films, которые соответствуют этому запросу direction_by = ”Gary Lennon”. Если вы хорошо разбираетесь в SQL, мы можем преобразовать этот запрос в следующую команду SQL SELECT.

SELECT * FROM FILMS WHERE directed_by="Gary Lennon"

image

Вы можете получить доступ к тем же результатам, используя следующий вызов REST API. Вы увидите такие же результаты в браузере или клиенте REST.

http://localhost:8983/solr/helloworld/select?fl=genre&indent=on&q=directed_by:"Shane Acker"&wt=json

Здесь «fl» означает «Список полей в ответе» или «Результаты». Нас интересует только поле «жанр». Преобразуйте это в SQL-запрос.

SELECT genre FROM FILMS WHERE directed_by="Shane Acker"

Таким же образом попробуйте поэкспериментировать с различными запросами SELECT для получения или фильтрации данных.

8. Удалить документы Apache Solr

Здесь мы собираемся удалить один документ, который соответствует условию direction_by = ”Zack Snyder”. Мы используем тот же «Обработчик запросов» = «/ update», что означает, что мы собираемся обновить ядро. Мы используем опцию «», что означает, что мы собираемся удалить или удалить документ, который соответствует заданному условию.

Здесь мы используем команду curl для выполнения операции DELETE, чтобы охватить также пример команды CURL. Вы можете поэкспериментировать с этим примером с другими параметрами, такими как клиент REST и т. Д.

$ curl http://localhost:8983/solr/helloworld/update/?commit=true -H "Content-Type: application/xml" -d "directed_by:'Zack Snyder'"


0563

9. Удалить Apache Solr Core

Мы можем обновить Apache Solr Core, используя «Request-Handler» = «/ update» и выполняя операции добавления / обновления / удаления для документов. Для этого мы можем использовать REST API в браузере, консоль администратора, клиент REST или команду CURL. При необходимости мы можем удалить или удалить ядра, используя параметр «Выгрузить» в консоли администратора Apache Solr.

Пожалуйста, выполните следующие действия, чтобы выгрузить ядро

  • Доступ к консоли администратора Solr:http://localhost:8983/solr/

  • Нажмите на опцию «Выбор ядра» и выберите ядро ​​«helloworld» в раскрывающемся списке.

  • Нажмите кнопку «Выгрузить» на правой боковой панели.

  • Он удаляет или выгружает выбранное ядро ​​из Apache Solr.

  • Он не удаляет папку Core из пути «server / solr».

10. Почему Apache Solr? Почему не Apache Lucene?

Как мы знаем, Apache Lucene - это базовый API ядра для обеих популярных поисковых систем: Apache Solr и ElasticSearch. Однако Apache Lucene - это простой Java API, который полезен только для Java-приложений.

Как и ElasticSearch, Apache Solr представляет собой оболочку поверх API Apache Lucene. Он представил этот Java API как REST API, как показано на диаграмме ниже. Теперь мы можем использовать этот Search API в любых приложениях. А также REST API очень гибкий и легкий.

image

11. Apache Solr против ElasticSearch против реляционных баз данных

Как мы знаем, и Apache Solr, и ElasticSearch используют Apache Lucene для реализации своих основных функций. Почти оба поддерживают одни и те же функции. Некоторые заметные сходства:

  • Оба используют Apache Lucene под капотом.

  • Оба поддерживают REST Base API.

  • Оба являются поисковыми системами с открытым исходным кодом.

  • Оба поддерживают BigData и облачные технологии.

  • Оба поддерживают управление кластером.

  • Оба они полезны как вторичные хранилища данных.

  • Оба используют обратное индексирование Apache Lucene для поддержки функции быстрого поиска.

У них есть следующие отличия.

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

  • Apache Solr использует Apache Zookeepter для управления кластером, тогда как ElasticSearch использует для этого Zen Discovery.

  • ElasticSearch поддерживает только REST API на основе JSNO, тогда как Apache Solr поддерживает многие другие форматы, такие как JSON, XML, Doc, CSV, Binary и т. Д.

  • Apache Solr имеет встроенную поддержку безопасности, в отличие от ElasticSearch.

  • ElasticSearch поддерживает только хранилище данных без схемы, тогда как Apache Solr поддерживает как на основе схемы, так и без схемы.

Различия между Apache Solr и реляционными базами данных

  • Реляционные базы данных поддерживают только структурированные данные, тогда как Apache Solr поддерживает как структурированные, так и неструктурированные данные.

  • Реляционные базы данных хороши для нормализованных данных, тогда как Apache Solr хорош для де-нормализованных данных.

  • Реляционным базам данных требуется схема для хранения данных, тогда как Apache Solr поддерживает как схему на основе, так и схему меньше.

  • Реляционные базы данных поддерживают сложные запросы и соединения, если их не поддерживает Apache Solr.

  • Мы можем использовать реляционные базы данных в качестве первичного хранилища данных, а Apache Solr - в качестве вторичного хранилища данных.