Drupal 7 і ApacheSolr для новачків

11.11.2015
Drupal 7 і ApacheSolr для новачків
Автор:

Багато чув про ApacheSolr, але не було можливості його спробувати. Тому вирішив створити тестовий майданчик для перевірки роботи і налаштування пошуку в Drupal з використанням ApacheSolr.

Кілька переваг пошуку через ApacheSolr перед звичайним пошуком в Drupal:

  • пошук через ApacheSolr працює набагато швидше і не навантажує сервер бази даних;
  • дозволяє гнучке налаштування параметрів пошуку;
  • сайт простіше масштабувати, ви легко можете розмістити ApacheSolr на сусідньому сервері;
  • використання фасетів (уточнювальний пошук).

1. Встановлення Apache Solr

Для початку потрібно встановити java, тому що ApacheSolr написаний на java.

sudo apt-get -y install openjdk-7-jdk

mkdir /usr/java

ln -s /usr/lib/jvm/java-7-openjdk-amd64 /usr/java/default

У цій статті ми будемо встановлювати solr-tomcat, тож виконайте наступну команду:

sudo apt-get -y install solr-tomcat

Тепер ApacheSolr повинний бути доступний за адресою http://your_ip:8080/solr.

Більше інформації.

2. Підключення Apache Solr до Drupal

Спочатку встановимо декілька модулів: search_api і search_api solr.

Я установив search_api-7.x-1.16 и search_api_solr-7.x-1.

Тепер потрібно зайти в модуль search_api_solr і скопіювати звідти два файли - schema.xml і solrconfig.xml в папку з налаштуваннями сервера (шлях до папки можна знайти командою “whereis solr” - в моєму випадку це “/etc/solr/conf/”). Ці файли потрібні для того, щоб Drupal міг взаємодіяти з Apache Solr. Після того як ви скопіювали ці файли, сервер необхідно перезапустити.

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.

Зараз виводяться всі ноди, оскільки ключові слова не вказані.

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

4. Фасетні фільтри

Для чого ж потрібен фасет і що це таке. Фасет - це фільтр за певним полем. Цей фільтр працює як уточнення.

Розглянемо невеликий приклад. У вас є сутність автомобіль і вона характеризується кольором і фірмою-виробником. Спочатку ви можете обрати кілька кольорів у фільтрі.

Але, обравши фірму виробника, ви фільтруєте вибірку і тепер вам доступні лише ті кольори, які відповідають обраному виробнику.

Якщо знову натиснути на Ford, то фільтр повернеться в первинний стан. Така функціональність повсюдно використовується для пошуку в різних інформаційних базах і каталогах. Так давайте ж розберемося, як налаштувати фасети для пошуку на Drupal через Apache Solr.

Спочатку виконаємо ще кілька дій для налаштування сайту:

1. Спершу необхідно встановити модуль facetapi і Search facets (входить в facetapi).

2. Тепер створимо новий тип вмісту Car і додамо туди поля для кольору і фірми виробника.

3. Створимо новий індекс, щоб він індексував ноди з типом car.

4. Потім переходимо у вкладку Fields і включаємо поля колір і тип в індекс.

Отже, ми налаштували індекс для пошуку по Нодах з типом авто. Тепер перейдемо безпосередньо до фасетів. Якщо ви вже увімкнули необхідні модулі та почистили кеш, то в налаштуваннях індексу у вас повинна була з'явитися нова вкладка Грані. У цей вкладці ви можете увімкнути фасетний фільтр для полів, які додані в індекс. Для кожного фасета можна вказати налаштування, але про них трохи пізніше. Поки що просто включимо фасети і проіндексуємо наші ноди з типом car.

Тепер потрібно налаштувати виведення. Для кожного фасетного фільтра створюється звичайний блок, і ви можете вивести його, як вам зручно, наприклад через регіони або панелі. У фасетів є один нюанс - на сторінці слід поміщати спершу в'юху з результатами, а нижче за рівнем (відповідно пізніше за виведенням) блоки фасетів. Після того, як я помістив блоки фасетів в регіон, у мене вийшла така сторінка:

Тепер поговоримо про налаштування фасетів.

На скріншоті ви можете побачити форму налаштувань.

(Подивитися більшу картинку)

Розглянемо найважливіші з них:

Display widget - дозволяє вибирати віджет для фасета. За замовчуванням доступні віджети у вигляді посилань і чекбоксів.

Сортування - визначає за якими критеріями будуть сортуватися значення в блоці фасета при відображенні.

Оператор - AND або OR. У випадку з AND ви можете вибрати лише одне значення в кожному фасеті, а у випадку з OR - кілька.

Display for searches - можна вказати, для яких дисплеїв у в'юсі спрацьовуватиме фасет. Це може стати в нагоді, якщо у вас на одній сторінці кілька дисплеїв з пошуковою видачею і ви хочете фільтрувати лише один з них.

Для генерації реалістичного контенту використав модуль Realistic Dummy Content.

Для того щоб були гарні посилання під час використання фасетних фільтрів використав модуль Facet API Pretty Paths.

Нехай ці поради про ApacheSolr принесуть вам користь!

4 votes, Рейтинг: 5

Також по темі

1

Не втрачати мобільних користувачів вашого сайту допомагає респонсивний дизайн (від англ. "responsive" означає "той, що швидко реагує та адаптується...

2

Всім привіт! Одного разу ми розповідали вам про комерційні сайти на Drupal з інтеграцією в соцмережі. А...

3

“Сім раз відміряй, а один раз відріж”, - говорить відома приказка. Якщо ви зараз думаєте про створення веб-сайту, безсумнівно, ви не хочете помилитися у виборі CMS. Тому краще все зважити, перш...

4

Препроцесори SASS і LESS суттєво спрощують фронт-енд розробку. Для їх автоматичної компіляції в CSS автоматично можна використовувати Grunt.js. Давайте подивимося, як це робити.

5

Яким би майстром ти не був, а вивчати досвід інших потрібно. Тож розгляньмо 10 цікавих вебсайтів брендів, які віддали перевагу Друпалу.

Subscribe to our blog updates