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
Дополнительной настройка веб-сервера и его виртуальных хостов не требуется.
Статус ноды можно посмотреть следующим образом:
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 можно добавлять двумя способами:
- HTTP
- Нативный клиент
Поиск в 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, например, из этого материала.