Solr —программное обеспечение для поиска на сайте. Это поисковый индексатор и хранилище данных с богатым функционалом,в индекс для Solr помещаются документы целиком, а не только метаданные как для ряда аналогов.
Рассмотрим установку и настройку пакета на примере Debian 8.
Установка 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
Скачиваем исходники 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 mp500.xml to [base]
POSTing file ipod_video.xml to [base]
POSTing file manufacturers.xml to [base]
POSTing file gb18030-example.xml to [base]
POSTing file vidcard.xml to [base]
POSTing file monitor.xml to [base]
POSTing file monitor2.xml to [base]
POSTing file utf8-example.xml to [base]
POSTing file solr.xml to [base]
POSTing file hd.xml to [base]
POSTing file ipod_other.xml to [base]
POSTing file money.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
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»:{
«numFound»:1,
«start»:0,
«docs»:[{«id»:»SOLR1000",
«name»:»Solr, the Enterprise Search Server»,
«manu»:»Apache Software Foundation»,
«cat»:[«software»,»search»],
«features»:[
«Advanced Full-Text Search Capabilities using Lucene»,
«Optimized for High Volume Web Traffic»,
«Standards Based Open Interfaces — XML and HTTP»,
«Comprehensive HTML Administration Interfaces»,
«Scalability — Efficient Replication to other Solr Search Servers»,
«Flexible and Adaptable with XML configuration and Schema»,
«Good unicode support: héllo (hello with an accent over the e)»],
«price»:0.0,»price_c»:»0.0,USD»,
«popularity»:10,
«inStock»:true,»incubationdate_dt»:»2006-01-17T00:00:00Z»,
«_version_»:1584428112760799232}]}}
http://123.123.123.123:8983/solr/techproducts/select?q=popularity:10&wt=json&fl=cat,name
{«responseHeader»:{
«status»:0,»QTime»:5,
«params»:{
«fl»:»cat,name»,
«q»:»popularity:10",
«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
Запускам перестроение индекса (сделать это можно в том числе обращаясь с другого сервера по белому IP адресу)
curl http://123.123.123.123:8983/solr/index/update?commit=true
Как только это сделано — можно искать информацию по индексу
curl http://123.123.123.123:8983/solr/index/get?author=Admin
Solr хорош и тем, что может эффективно находить данные по неточным запросам. В больших проектах сервера с Solr объединяются в кластерные структуры, при больших нагрузках пакет дает значительно лучшую производительность, чем аналоги.