Это была ночь войны. Решил попробовать связать 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 выходит за рамки этой заметки, да я этим еще и не занимался. Единственное, что я сделал — заменил язык в schema.xml с English на Russian. Просто ищите и заменяйте, если у вас русскоязычный сайт. Для многоязычных сайтов есть модуль Drupal Apache Solr Multilingual, я его тоже посмотрел и использовал, он помогает настроить schema.xml по своим потребностям.
Настройка модуля Apachesolr
Настраивать тут особо нечего, нужно указать путь к приложению (или ядру) Solr, в моем случае это localhost, solr/soldo и порт 8080.
Индексируется сайт при запуске cron, количество скармливаемых за раз документов тоже настраивается. Фильтры, блоки, срезы я тоже пока не настраивал. Полагаю, будет похоже на модули Faceted Search и Lucen API, которые я уже видел.
Вроде бы ничего важного не упустил. Если что — спрашивайте. А я пойду искать способ закрыть Tomcat и сам Solr от мира — по-умолчанию приложения открыты всем, безо всякого ограничения доступа. Закрыть по-простому несложно, можно заставить Tomcat «слушать» только соединения на 127.0.0.1, но это не метод джедая — возможно, потребуется заходить в интерфейс издалека.
12 ответов к “Drupal + Tomtcat + Apache Solr на CentOS 5”
Это ты сейчас с кем разговаривал? Как я уже отстал от всех этих названий..
Это я с собой из будущего разговаривал 🙂 Вдруг когда-нибудь еще понадобится, а я гарантировано забуду скоро. Главное не забыть, что я это когда-то знал…
На TomCAT быстрее работает?
Не сравнивал. Tomcat просто уже был, плюс найденная мной инструкция была под него составлена.
Сам поиск solr работает мгновенно, через Drupal — накладывается обычный друпаловский лаг. Но там индекс совсем небольшой.
как его поставить на винде ? хочу посмотреть как он работает вообще.
Сам никогда не делал, но…
http://tomcat.apache.org/tomcat-6.0-doc/setup.html#Windows
Installing Tomcat on Windows can be done easily using the Windows installer. Its interface and functionality is similar to other wizard based installers, with only a few items of interest.
Должно быть не сложно.
Перепробовал уже все способы, поставил убунту, настроил все на убунту, но почему то индекм проходит а блоки поиска не появляются.
я может быть глупость скажу — а крон запускали?
крон запускаю, появляются файлы в папке 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 наверно мне в помощь но пока неработает )
Я с той же задачей сталкивался. Решил ее небольшим модулем, путем симуляции поиска пустой строки. Вот кусок кода на drupal.org. А тут он вживую, блок слева.