Установка и настройка Apache Solr


Apache Solr —программное обеспечение для поиска на сайте. Это поисковый индексатор и хранилище данных с богатым функционалом,в индекс для Solr помещаются документы целиком, а не только метаданные как для ряда аналогов.


Рассмотрим установку и настройку пакета на примере Debian.


Установка Apache Solr и базовая настройка пакета на Debian


apt-get -y install openjdk-7-jdk



Создадим каталог под файлы java

mkdir /opt/java



Далее — символьную ссылку /opt/java/default к библиотеке /usr/lib/jvm/java-7-openjdk-amd64

ln -s /usr/lib/jvm/java-7-openjdk-amd64 /opt/java/default



Создаем каталог под файлы пакета и переходим в него

mkdir /opt/solr

cd /opt/solr



Скачиваем исходники Apache Solr. Версию нужно брать самую свежую из доступных.

wget http://download.nextag.com/apache/lucene/solr/5.5.5/solr-5.5.5.tgz



Разархивируем

tar -zxvf solr-5.5.5.tgz



Затем переходим в каталог solr-5.5.5, при установке пакета создаются тестовые  файлы, которые можно использовать



В каталоге с файлами пакета будет README.txt, в котором содержится довольно полная информация по его использованию.



В частности, имеются инструкции по работе с примерами

bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:

cloud : SolrCloud example
dih : Data Import Handler (rdbms, mail, rss, tika)
schemaless : Schema-less example (schema is inferred from data during indexing)
techproducts : Kitchen sink example providing comprehensive examples of Solr features



cd /opt/solr/solr-5.5.5

bin/solr -e techproducts



Creating Solr home directory /opt/solr/solr-5.5.5/example/techproducts/solr

Starting up Solr on port 8983 using command:
bin/solr start -p 8983 -s «example/techproducts/solr»

WARNING: Java version 1.7.0_151 has known bugs with Lucene and requires the -XX:-UseSuperWord flag. Please consider upgrading your JVM.

NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=8433). Happy searching!

Copying configuration to new core instance directory:
/opt/solr/solr-5.5.5/example/techproducts/solr/techproducts

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

{
«responseHeader»:{
«status»:0,
«QTime»:3353},
«core»:»techproducts»}

Indexing tech product example docs from /opt/solr/solr-5.5.5/example/exampledocs
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update using content-type application/xml…
POSTing file mem.xml to [base]

POSTing file sd500.xml to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update…
Time spent: 0:00:00.634

Solr techproducts example launched successfully. Direct your Web browser to http://localhost:8983/solr to visit the Solr Admin UI



Apache Solr уcтановлен, доступен его веб-интерфейс


В браузере теперь потребуется ввести IP адрес сервера, номер порта, /solr

http://123.123.123.123:8983/solr

apache solr



Дополнительной настройка веб-сервера и его виртуальных хостов не требуется.



Статус ноды можно посмотреть следующим образом:

bin/solr status

Found 1 Solr nodes:

Solr process 8433 running on port 8983
{
«solr_home»:»/opt/solr/solr-5.5.5/example/techproducts/solr»,
«version»:»5.5.5 b3441673c21c83762035dc21d3827ad16aa17b68 — sarowe — 2017-10-20 09:02:42",
«startTime»:»2017-11-18T17:24:17.602Z»,
«uptime»:»0 days, 0 hours, 10 minutes, 54 seconds»,
«memory»:»43.1 MB (%8.8) of 490.7 MB»}



Если  сервер требуется остановить это можно сделать так:

bin/solr stop



Пакет позволяет искать данные в XML файлах. Для примера доступны некоторые образцы, увидеть их можно в example/exampledocs/

ls example/exampledocs/



less example/exampledocs/money.xml

<add>
<doc>
<field name=»id»>USD</field>
<field name=»name»>One Dollar</field>
<field name=»manu»>Bank of America</field>
<field name=»manu_id_s»>boa</field>



В том же каталоге находится post.jar, с помощью которого в индекс добавляются данные


java -Dc=techproducts -jar example/exampledocs/post.jar example/exampledocs/money.xml

SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update using content-type application/xml…
POSTing file money.xml to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update…
Time spent: 0:00:00.141



Также добавим еще один документ:

java -Dc=techproducts -jar example/exampledocs/post.jar example/exampledocs/solr.xml



Данные в Solr можно добавлять двумя способами:

  1. HTTP
  2. Нативный клиент


Поиск в Solr посредством HTTP запросов


Поисковые запросы можно отправлять по HTTP:

http://123.123.123.123:8983/solr/techproducts/select?q=solr&wt=json



Результат в браузере будет выглядеть следующим образом:


{«responseHeader»:{«status»:0,»QTime»:2,»params»:{«q»:»solr»,»wt»:»json»}},

            «response»:{

                        «name»:»Solr, the Enterprise Search Server»,

                         «cat»:[«software»,»search»],

                                           «features»:[

                                                         «Flexible and Adaptable with XML configuration and Schema»,




Часть вывода удалена для сохранения читабильности.

Другой запрос на поиск, также отправляемый через браузер по http:


http://123.123.123.123:8983/solr/techproducts/select?q=popularity:10&wt=json&fl=cat,name


{«responseHeader»:{

                      «status»:0,»QTime»:5,

                      «params»:{

                               «wt»:»json»}},

                                           «response»:{«numFound»:2,»start»:0,»

                                                     docs»:[{«name»:»Apple 60 GB iPod with Video Playback Black», «cat»:[«electronics»,»music»]},

                                                                  {«name»:»Solr, the Enterprise Search Server»,»cat»:[«software»,»search»]}]}}




Как можно видеть имеем 2 результата, удовлетворяющих запросу (популярность — 10 ): продукт компании Apple и непосредственно программынй пакет для поиска Solr.

Один из результатов нашелся в добавленном в индекс money.xml, другой в solr.xml



Создание индексов Solr и добавление данных в них


Можно создать новый индекс и добавить необходимую информацию, индекс создается так (index не ключевое слово, а просто имя):


bin/solr create -c index

Copying configuration to new core instance directory:
/opt/solr/solr-5.5.5/example/techproducts/solr/index

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

{
«responseHeader»:{
«status»:0,
«QTime»:1584},
«core»:»index»}


По созданным индексам и производится поиск.



Используя curl легко добавлять документы в созданный индекс (обращение к localhost производится только с того же сервера, на котором установлен Solr)

 curl http://localhost:8983/solr/index/update -d '
[
{"id" : "12",
"title" : "Search Softwarer for large projects",
"author" : "Admin"
}
]'

{«responseHeader»:{«status»:0,»QTime»:121}}



К имени полей можно добавлять _t, если ключ использован становится возможен полнотекстовый поиск. Например, author_t



Запускам перестроение индекса

curl http://123.123.123.123:8983/solr/index/update?commit=true



Сделать это можно в том числе обращаясь с другого сервера по белому IP адресу.



Как только это сделано — можно искать информацию по индексу

curl http://123.123.123.123:8983/solr/index/get?author=Admin



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



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

За образец можно взять Unit файл Systemd, например, из этого материала.

Сказать спасибо