Поисковая система на собственном сайте

Q. Как установить Solr?
A. Из командной строки раскрутить архив
$ tar xzf solr-7.7.2.tgz
Зайти в каталог tar xzf solr-7.7.2.tgz и запустить его
$ bin/solr start

Разрешить доступ к порту 8983 источник
# firewall-cmd --zone=public --add-port=8983/tcp --permanent
success
# firewall-cmd --reload
success
Установим на доступ к Solr пароль источник. Запишем файл security.json
{
"authentication":{
"blockUnknown": true,
"class":"solr.BasicAuthPlugin",
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}
"realm":"My AE Solr users"
},
"authorization":{
"class":"solr.RuleBasedAuthorizationPlugin",
"permissions":[{"name":"security-edit",
"role":"admin"}],
"user-role":{"solr":"admin"}
}
}
в каталог /solr-7.7.2/server/solr. Пользователь: solr, пароль: SolrRocks.
Для работы из командной строки с Solr нужно добавить в файл bin/solr.in.sh следующие строки
SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"

Q. Как установить Nutch?
A. Из командной строки раскрутить архив источник
$ tar xzf apache-nutch-1.15-bin.tar.gz
Зайти в каталог nutch
$ cd cd apache-nutch-1.15
Проверить распакову
$ bin/nutch
nutch 1.15
Usage: nutch COMMAND
where COMMAND is one of:
readdb read / dump crawl db
mergedb merge crawldb-s, with optional filtering
...
Установить переменную среды JAVA_HOME
$ export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
или прописать в .bashrc
Подправим настройки Nutch, зададим имя краулера (т.с. «паука») записав в файл conf/nutch site.xml свойство http.agent.name
<property>
<name>http.agent.name</name>
<value>My Nutch Spider</value>
</property>
Создать URL seed список
$ mkdir -p urls
$ cd urls
$ touch seed.txt
В файл seed.txt впишем адреса сайтов для поиска, например
http://nutch.apache.org/
http://10.52.2.22/ (у меня)
Следующий файл, который надо редактировать conf/regex-urlfilter.txt , в нем регулярные выражения по чтению или не чтению страниц сайтов. Руководство Nutch советует заменить строку в конце файла
# accept anything else
+.
на строку вида
+^https?://([a-z0-9-]+\.)*nutch\.apache\.org/
я сделал такую строку
+^https?://([0-9]+\.)+([0-9]+)/ (у меня)
Но можно сделать проще, оставить строку
+.
А в файл conf/nutch-site.xml вставить параметр
<property>
<name>db.ignore.external.links</name>
<value>true</value>
</property>

Кроме того, поскольку мой сайт содержит ссылки на страницы вида s.php?op_id=8526, то я убрал исключения вида
# skip URLs containing certain characters as probable queries, etc.
###-[?*!@=] (у меня)

# skip URLs with slash-delimited segment that repeats 3+ times, to break
###-.*(/[^/]+)/[^/]+\1/[^/]+\1/ (у меня)

https://wiki.apache.org/nutch/NutchTutorial#A3._Crawl_your_first_website

Начинём заполнять базу Nutch
$ bin/nutch inject crawl/crawldb urls
Если будут ошибки типа
Injector job failed: gmir.domain: gmir.domain: Имя или служба не известны
Injector: java.net.UnknownHostException: gmir.domain: gmir.domain: Имя или служба не известны
at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
Допиши в /etc/hosts
127.0.0.1 localhost.localdomain localhost compname.domain
::1 ip6-localhost ip6-loopback

Для сбора данных сгенерируем сегемент
$ bin/nutch generate crawl/crawldb crawl/segments
Сегмент создается с именем текущего времени, запишем его в s1
$ s1=`ls -d crawl/segments/2* | tail -1`
$ echo $s1
Ну и запустим извлечение данных сегмента
$ bin/nutch fetch $s1
Затем разбор собранных данных
$ bin/nutch parse $s1
$ bin/nutch updatedb crawl/crawldb $s1
$ bin/nutch invertlinks crawl/linkdb -dir crawl/segments
$ bin/nutch index crawl/crawldb/ -linkdb crawl/linkdb/ $s1 -filter -normalize -deleteGone
Или можно сделать так:
$ bin/crawl -s urls crawl 1

А потом обновлять индекс:
$ bin/crawl -i crawl 1

Q. Интеграция Nutch и Solr
A. Выполняем команды:
$ export APACHE_SOLR_HOME=~/solr-7.7.2
$ mkdir -p ${APACHE_SOLR_HOME}/server/solr/configsets/nutch/
$ cp -r ${APACHE_SOLR_HOME}/server/solr/configsets/_default/* ${APACHE_SOLR_HOME}/server/solr/configsets/nutch/
Затем надо скопировать схему Nutch, которая посвежее, https://github.com/apache/nutch/blob/master/conf/schema.xml в каталог server/solr/configsets/nutch/conf .

И создадим в Solr узел core “nutch”
$ bin/solr create -c nutch -d server/solr/configsets/nutch/conf/
Index writers in Nutch
Файл ...nutch/conf/index-writers.xml прописать пароль доступа
<param name="auth" value="true"/>
<param name="username" value="solr"/>
<param name="password" value="SolrRocks"/>

После этого, можно запустить загрузку данных паука Nutch в сервер поиска Solr простой командой Nutch
$ bin/crawl -i crawl 2

Solr как служба
Создать core “nutch” источник
# su solr -c "/opt/solr/bin/solr create -force -c nutch -d /opt/solr/server/solr/configsets/nutch/conf/"
Поместить файл security.json в каталог /var/solr/data .
Для работы из командной строки с Solr нужно добавить в файл /opt/solr/in/solr.in.sh следующие строки:
SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"

Q. Как завести нового пользователя
A. Запустить их командной строки
$ curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{ "set-user": {"toms" : "8hpq7fgm"}}'

Q. Удалить пользователя(ей)
A. Запустить их командной строки
$ curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{ "delete-user": ["tom","toms"]}'

Q. Как изменить пароль пользователя
A. Запустить их командной строки
$ curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{ "set-user": {"toms" : "anotherpass"}}'
Если дело касается solr, то еще заменить пароль в /opt/solr/bin/solr.in.sh и в Nutch надо прописать новый пароль в файл ...nutch/conf/index-writers.xml
<param name="password" value="anotherpass"/>

bin/nutch clean не работает с паролем для Solr можно временно вырубать авторизацию на Solr
$ curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-property": {"blockUnknown":false}}'
А затем вернув на true.
Попробовать файл conf/httpclient-auth.xml – не работает?

Можно сделать по другому – запретить доступ к серверу Solr извне с помощью сетевых настроек
# firewall-cmd --zone=public --remove-port=8983/tcp --permanent
# firewall-cmd --zone=internal --add-port=8983/tcp --permanent
# firewall-cmd --zone=internal --add-source=127.0.0.1/32 --permanent
# firewall-cmd --zone=internal --add-source=10.52.2.22/32 --permanent (адрес сервера в сети)
# firewall-cmd --zone=internal --add-source=10.52.3.126/32 --permanent (мой комп)
# firewall-cmd –reload
# firewall-cmd --zone=internal --list-all (посмотреть что получилось)

Тогда можно обойтись без авторизации на Solr.
Очистка индекса (данных) Solr источник и источник2
$ curl http://localhost:8983/solr/nutch/update -H "Content-type: text/xml" --data-binary '<delete><query>*:*</query></delete>'
$ curl http://localhost:8983/solr/nutch/update -H "Content-type: text/xml" --data-binary '<commit />'
$ curl http://localhost:8983/solr/nutch/update -H "Content-type: text/xml" --data-binary '<optimize />'
 

Дополнительная настройка Nutch

Файл conf/nutch-site.xml

Игнорировать внешние ссылки (и тогда в conf/regex-urlfilter.txt не надо прописывать правила фильтрации URL конкретного сайта, а оставить +.)

<property>
 <name>db.ignore.external.links</name>
 <value>true</value>
</property>

Уменьшить ожидание при запросе страницы

<property>
  <name>fetcher.server.delay</name>
  <value>2.0</value>
  <description>
The number of seconds the fetcher will delay between successive requests to the same server. Note that this might get overridden by a Crawl-Delay from a robots.txt and is used ONLY if fetcher.threads.per.queue is set to 1.
  </description>
</property>


Литература:
https://wiki.apache.org/nutch/NutchTutorial#Option_1:_Setup_Nutch_from_a_binary_distribution
https://opensourceconnections.com/blog/2014/05/24/crawling-with-nutch/
https://lucene.apache.org/solr/guide/7_0/basic-authentication-plugin.html

Категория: linux | Добавил: ae999 (14.07.2019)
Просмотров: 270