Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

в 5:09, , рубрики: apache solr, drupal, drupal 7, search api, поиск, метки: , , ,

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка
Я хочу написать не просто очередной пост «как прикрутить Солр к Друпалу», а серию подробных постов начиная от базовой настройки и заканчивая фасетами.
На основе ваших комментариев и вопросов я готов включить дополнительный материал в очередной пост.

Несколько преимуществ поиска через 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 включен.

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Данные сервера, такие как хост, порт и путь подходят для установки по умолчанию. Если сервер настроен правильно, то после отправки формы вы увидите информационное сообщение:

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Теперь создадим индекс — admin/config/search/search_api/add_index. Назовем его Node index, в качестве сервера, выбираем созданный нами Solr server. Index items immediately — полезная опция, позволяет индексировать ноды в момент создания (если не выбрать ее то ноды будут индексироваться по крону).

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Следующий шаг — выбор полей, по которым будем искать. Пока что выберем только title и сохраним форму. Теперь создаем представление (view) для того, чтобы отображать результаты поиска — admin/structure/views/add. Перед этим необходимо включить модули search_api_views, views, views_ui и ctools.

Для результатов поиска есть специальный тип представлений для модуля views. Выберите ваш индекс — Node index и создайте представление с дисплеем page и настройте его.

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Для этого добавим поля Title и Body для вывода. Затем добавим контекстуальный фильтр «Search: Fulltext search» и выберем поле Title в настройках это фильтра. Таким образом поиск будет происходить по полю Title. В дополнение к этому добавим еще exposed filter для того чтобы можно было вводить аргументы поиска через форму.

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Сохраняем вьюху. Запускаем индексирование нод, если они еще не проиндексированы на этой странице admin/config/search/search_api/index/node_index/status. Я заранее создал пару нод — статей.

Переходим на страницу /search-results — именно такой адрес я указал для дисплея с типом page.
Сейчас выводятся все ноды, поскольку ключевые слова не указаны.

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Так выглядят результаты поиска по ключевым словам.

Поиск на Drupal 7 с помощью Apache Solr ч.1 — базовая настройка

Заключение

По умолчанию Apache Solr плохо ищет по русским словам. Чтобы это исправить, в файле schema.xml найдите строчки
<!-- <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> -->
и замените их на
<filter class="solr.SnowballPorterFilterFactory" language="Russian" protected="protwords.txt"/>

В процессе разработки, я сталкивался с тем, что последние версии модулей поиска не дружат с последней версией Apache Solr, схема не подходит в последней версии поискового сервера и прочими проблемами совместимости. Поэтому в тексте статьи я указал версии модулей и поискового сервера, которые я использовал. Если у вас будут проблемы с индексированием, попробуйте использовать именно эти версии.

Автор: IlyinEugene

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js