Рубрики
Статьи

Drupal + Tomtcat + Apache Solr на CentOS 5

Это была ночь войны. Решил попробовать связать Drupal 6 и Apache Solr — задача не для слабых духом, сразу говорю.

Имелось в наличии: сервер с CentOS 5, Plesk 9, Java 1.4.2, Tomcat 5, ну и сайт на Acquia Drupal. Plesk упомянут по той причине, что он не умеет управлять более свежими версиями Tomcat, судя по отзывам.

Java

Apache Solr 1.4 требует для работы Java 1.5+, так что пришлось обновлять. Были сомнения на тему Tomcat, но обошлось — все работает, вроде бы.

yum install java-1.6.0-openjdk.i386
yum install java-1.6.0-openjdk-devel.i386

Выполнять надо с правами root, понятно (sudo правильнее, говорят). Прошлая версия (java 1.4.2) осталась сбоку, /etc/alternatives самостоятельно переключились на новую версию.

Apache Solr

Установку Solr выполнял вот по этому руководству (Solr 1.4 on Ubuntu 9.10 and CentOS 5 ), с небольшими нюансами, о которых ниже.

Нужно скачать пакет в любой каталог, распаковать, из него потребуются example/webapps/slor.war и пример конфигурации example/solr/conf* ну и example/multicore/solr.xml.

[root@ns1]# ls  /var/solr
conf  core-habrus  core-soldo  solr.war  solr.xml

Предполагается использовать Solr на нескольких сайтах, так что сразу начал настраивать multicore конфигурацию.

[root@ns1 /]# cat /var/solr/solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--
 All (relative) paths are relative to the installation path
  
  persistent: Save changes made via the API to this file
  sharedLib: path to a lib directory that will be shared across all cores
-->
<solr persistent="false">
  <!--
  adminPath: RequestHandler path to manage cores.
    If 'null' (or absent), cores will not be manageable via request handler
  -->
  <cores adminPath="/admin/cores">
    <core name="soldo" instanceDir="core-soldo" />
    <core name="habrus" instanceDir="core-habrus" />
  </cores>
</solr>

Важная часть — внутри cores, там название и рабочий каталог для каждого ядра Solr. Каталог относителен solr home, в моем случе /var/solr/core-soldo. В этот каталог (в подкаталог conf) нужно положить конфигурационные файлы для каждого ядра. В нем же (подкаталог data создастся сам) будут храниться данные поискового индекса.

[root@ns1 /]# ls /var/solr/core-soldo
conf  data
[root@ns1 /]# ls /var/solr/core-soldo/conf
admin-extra.html   elevate.xml                  protwords.txt  scripts.conf    spellings.txt        stopwords.txt  xslt
compoundwords.txt  mapping-ISOLatin1Accent.txt  schema.xml     solrconfig.xml  stopwords_spell.txt  synonyms.txt

Файлы schema.xml и solrconfig.xml нужно взять из папки модуля Drupal apachesolr. У меня установлен дистрибутив Acquia Drupal, этот модуль уже есть в папке [httpdocs]/modules/acquia/apachesolr. Я сделал в папке /var/solr каталог conf и собрал в нем базовую конфигурацию, которую затем «размножил» по папкам отдельных сайтов.

Tomcat

Tomcat 5 мне достался по наследству, его устанавливает Plesk. В общем, он уже был и работал на порту 8080, даже какие-то приложения установлены. Plesk поддерживает хостинг Java приложений, но на нашем сервере ими никто не пользуется.

Для начала я добавил роли и пользователя admin в /etc/tomcat5/tomcat-users.xml, зашел в управление приложениями, полюбовался. Solr там пока нет, понятно. Сообщаем Tomcat о нашем приложении. Нужно создать файл /etc/tomcat5/Catalina/localhost/solr.xml.

[root@ns1 /]# cat /etc/tomcat5/Catalina/localhost/solr.xml
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="/var/solr/solr.war" debug="0" crossContext="true" >
   <Environment name="solr/home" type="java.lang.String" value="/var/solr" override="true" /> 
</Context>

Здесь указывается путь к solr.war и рабочий (домашний) каталог приложения. После перезапуска tomcat (/etc/init.d/tomcat5 restart) в списке приложений появится Solr. Если все нормально, то он заработает. У меня это получилось далеко не с первого раза. Для диагностики можно временно обойти mulcitore, для этого в этом конфиге нужно заменить solr/home на полный путь к одному из ядер (/var/solr → /var/solr/core-soldo).

Крайне важный момент, стоивший мне пары часов жизни. В файле /etc/tomcat5/server.xml нужно в коннекторе указать URIEncoding, иначе русские запросы будут переводиться в ASCII и Solr ничего, понятное дело, не сможет найти.

<Connector URIEncoding="UTF-8" port="8080" maxHttpHeaderSize="8192" ... >

Найти эту строку можно по порту 8080, она внутри ветки <Service name="Catalina">. Не забывайте перезапускать Tomcat.

Диагностика Solr

Если вам повезло больше, чем мне, и все заработало сразу, то можно побаловаться интерфейсом Solr и потестировать вашу конфигурацию. По адресу http://your_host:8080/solr/ должен быть список ядер (при multicore конфигурации) или просто одна ссылка на админку (для single core).

Solr Admin

Настройка параметров, фильтров, стеммеров, синонимов и словарей Solr выходит за рамки этой заметки, да я этим еще и не занимался. Единственное, что я сделал — заменил язык в schema.xml с English на Russian. Просто ищите и заменяйте, если у вас русскоязычный сайт. Для многоязычных сайтов есть модуль Drupal Apache Solr Multilingual, я его тоже посмотрел и использовал, он помогает настроить schema.xml по своим потребностям.

Настройка модуля Apachesolr

Настраивать тут особо нечего, нужно указать путь к приложению (или ядру) Solr, в моем случае это localhost, solr/soldo и порт 8080.

Drupal Apache Solr

Индексируется сайт при запуске cron, количество скармливаемых за раз документов тоже настраивается. Фильтры, блоки, срезы я тоже пока не настраивал. Полагаю, будет похоже на модули Faceted Search и Lucen API, которые я уже видел.

Вроде бы ничего важного не упустил. Если что — спрашивайте. А я пойду искать способ закрыть Tomcat и сам Solr от мира — по-умолчанию приложения открыты всем, безо всякого ограничения доступа. Закрыть по-простому несложно, можно заставить Tomcat «слушать» только соединения на 127.0.0.1, но это не метод джедая — возможно, потребуется заходить в интерфейс издалека.

12 ответов к “Drupal + Tomtcat + Apache Solr на CentOS 5”

Это ты сейчас с кем разговаривал? Как я уже отстал от всех этих названий..

Это я с собой из будущего разговаривал 🙂 Вдруг когда-нибудь еще понадобится, а я гарантировано забуду скоро. Главное не забыть, что я это когда-то знал…

Не сравнивал. Tomcat просто уже был, плюс найденная мной инструкция была под него составлена.
Сам поиск solr работает мгновенно, через Drupal — накладывается обычный друпаловский лаг. Но там индекс совсем небольшой.

как его поставить на винде ? хочу посмотреть как он работает вообще.

Перепробовал уже все способы, поставил убунту, настроил все на убунту, но почему то индекм проходит а блоки поиска не появляются.

крон запускаю, появляются файлы в папке data.

Number of documents in index: 2

Number of terms in index: 80

Number of fields in index: 33

У меня включена замена стандартного поиска:

Make Apache Solr Search the default:
Включено
Hides core node search, and makes the search block submit to Apache Solr Search

Блоки фильтров появляются только в результатах поиска и только если есть что фильтровать
http://4soldo.ru/search/apachesolr_search/kershaw тут есть
http://4soldo.ru/search/apachesolr_search/cvv2 тут нету

Есть еще блок Apache Solr recommendations, он появляется на страницах /node/*
http://4soldo.ru/gde-kupit/fantasticheskii-ryukzak-vancl-urban-independence-za-999-19473

Думаю все у вас работает, просто контента мало, наверно.

Да так и есть всё работает, огромное спасибо, а я вот думал что фасетный поиск можно организовать как в интернет магазинах, Apache Solr Facet Builder наверно мне в помощь но пока неработает )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *