Я хочу написать не просто очередной пост «как прикрутить Солр к Друпалу», а серию подробных постов начиная от базовой настройки и заканчивая фасетами.
На основе ваших комментариев и вопросов я готов включить дополнительный материал в очередной пост.
Список статей:
- Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка
- Поиск на Drupal 7 с помощью Apache Solr ч.2 — учимся настраивать индекс
- Поиск на Drupal 7 с помощью Apache Solr ч.3 — учимся добавлять собственные поля и опции в индекс
- Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры
- Поиск на Drupal 7 с помощью Apache Solr ч.5 — виджеты для фасетных фильтров
- Поиск на Drupal 7 с помощью Apache Solr ч.6 — настраиваем apache solr + tomcat
- Поиск на Drupal 7 с помощью Apache Solr ч.7 — полнотекстовый поиск на русском языке
Несколько преимуществ поиска через Apache Solr перед обычным поиском в Drupal:
- поиск через Apache Solr работает намного быстрее и не нагружает сервер базы данных
- гибко настаиваемые параметры поиска
- сайт проще масштабировать, вы легко можете разместить Apache Solr на соседнем сервере
- использование фасетов (уточняющий поиск)
Итак в первой части начнем с базовой настройки.
Входные параметры:
Я использую ОС Ubuntu 10.04
За основу я взял Drupal 7.22 и модули для поиска search_api и search_api_solr
Сервер поиска Apache Solr 3.6.1
Список модулей, которые потребуется скачать: search_api, search_api_solr, entity, ctools, views
1. Установка Apache Solr
Скачиваем сервер с официального сайта
Есть и более новая версия Apache Solr 4.x, но файлы схемы в модуле search_api_solr есть только для третьей версии, поэтому следует использовать ее.
Распаковываем скачанный архив в любую удобную для вас папку.
В моем случае это /home/kainz/applications/apache-solr-3.6.1 Для запуска сервера, вам понадобится Java. У меня установлен пакет openjdk-6, вы можете выбрать этот или любой другой, который вам подойдет.
Чтобы запустить сервер нужно в консоли перейти в директорию Apache Solr, а затем в example (в моем случае это /home/kainz/applications/apache-solr-3.6.1/example) и выполнить команду
java -jar start.jar
. В случае успешного запуска вы увидите кучу служебной информации и в самом конце сообщение:
«2013-04-05 00:27:09.845:INFO::Started SocketConnector@0.0.0.0:8983» или что-то похожее (зависит от версии).
Если у вас возникнут проблемы совместимости новых версий Apache Solr с модулями Drupal, то можете скачать сервер, который я использовал при написании этого мануала. Он уже настроен и работает.
2. Подключение Apache Solr к Drupal
Сперва устанавливаем модули search_api и search_api solr.
Я использовал search_api_solr 7.x-1.0-rc2 и search_api 7.x-1.4
Помимо модулей, необходимо установить библиотеку SolrPHPClient. Скачать ее можно здесь. Скачанную библиотеку необходимо положить в папку sites/all/libraries/SolrPHPClient в вашем Drupal сайте.
Теперь нужно зайти в модуль search_api_solr и скопировать оттуда два файла — schema.xml и solrconfig.xml в папку с конфигами сервера (в моем случае /home/kainz/applications/apache-solr-3.6.1/example/solr/conf). Эти файлы нужны для того чтобы Drupal мог взаимодействовать с Apache Solr. После того как вы скопируете эти файлы, сервер необходимо перезапустить. Попробуйте перейти по адресу localhost:8983/solr/admin/ чтобы убедиться что поисковый сервер работает.
3. Настраиваем поиск в Drupal
Если вы еще не включили модули search_api и search_api_solr, то включите их и очистите кеш.
На странице admin/config/search/search_api вы сможете создать две сущности — сервер и индекс.
Сервер служит своего рода мостом между Drupal и Apache Solr. В нем хранятся настройки для доступа к серверу Apache Solr.
Индекс позволяет настраивать поиск определенным образом. Вы можете создать несколько индексов для одного сервера. Например разные индексы для разных типов нод.
Итак создадим сервер admin/config/search/search_api/add_server
В качестве класса сервиса выбираем «Solr service». Если вы не можете выбрать класс, то убедитесь что библиотека SolrPHPClient установлена в sites/all/libraries/SolrPHPClient и модуль search_api_solr включен.
Данные сервера, такие как хост, порт и путь подходят для установки по умолчанию. Если сервер настроен правильно, то после отправки формы вы увидите информационное сообщение:
Теперь создадим индекс — admin/config/search/search_api/add_index. Назовем его Node index, в качестве сервера, выбираем созданный нами Solr server. Index items immediately — полезная опция, позволяет индексировать ноды в момент создания (если не выбрать ее то ноды будут индексироваться по крону).
Следующий шаг — выбор полей, по которым будем искать. Пока что выберем только title и сохраним форму. Теперь создаем представление (view) для того, чтобы отображать результаты поиска — admin/structure/views/add. Перед этим необходимо включить модули search_api_views, views, views_ui и ctools.
Для результатов поиска есть специальный тип представлений для модуля views. Выберите ваш индекс — Node index и создайте представление с дисплеем page и настройте его.
Для этого добавим поля Title и Body для вывода. Затем добавим контекстуальный фильтр «Search: Fulltext search» и выберем поле Title в настройках это фильтра. Таким образом поиск будет происходить по полю Title. В дополнение к этому добавим еще exposed filter для того чтобы можно было вводить аргументы поиска через форму.
Сохраняем вьюху. Запускаем индексирование нод, если они еще не проиндексированы на этой странице admin/config/search/search_api/index/node_index/status. Я заранее создал пару нод — статей.
Переходим на страницу /search-results — именно такой адрес я указал для дисплея с типом page.
Сейчас выводятся все ноды, поскольку ключевые слова не указаны.
Так выглядят результаты поиска по ключевым словам.
Заключение
По умолчанию Apache Solr плохо ищет по русским словам. Чтобы это исправить, в файле schema.xml найдите строчки
<!-- <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> -->
и замените их на
<filter class="solr.SnowballPorterFilterFactory" language="Russian" protected="protwords.txt"/>
В процессе разработки, я сталкивался с тем, что последние версии модулей поиска не дружат с последней версией Apache Solr, схема не подходит в последней версии поискового сервера и прочими проблемами совместимости. Поэтому в тексте статьи я указал версии модулей и поискового сервера, которые я использовал. Если у вас будут проблемы с индексированием, попробуйте использовать именно эти версии.