Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

в 6:37, , рубрики: apache solr, cms, drupal, drupal 7, facet, search api, search index, Веб-разработка, поиск, фасетная фильтрация, метки: , , , , , ,

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры
В предыдущих статьях, я в основном затрагивал вопросы, связанные с полнотекстовым поиском. В этот раз поговорим о фасетных фильтрах для поиска на Drupal с помощью Apache Solr. Тем, кто не читал предыдущие материалы, я рекомендую ознакомиться с ними для лучшего понимания темы. Осторожно, под катом много картинок.

Для чего же нужен фасет и что это такое. Фасет — это фильтр по определенному полю. Этот фильтр работает, как уточняющий.

Рассмотрим небольшой пример. У вас есть сущность автомобиль и она характеризуется цветом и фирмой-изготовителем. Изначально вы можете выбрать несколько цветов в фильтре.

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

Но выбрав фирму изготовителя, вы фильтруете выборку и теперь вам доступны лишь те цвета, которые соответствуют выбранному изготовителю.

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

Если снова нажать на Renault, то фильтр вернется в первоначальное состояние.

Такая функциональность повсеместно используется для поиска в различных информационных базах и каталогах.

Так давайте же разберемся, как настроить фасеты для поиска на Drupal, через Apache Solr. В прошлых уроках мы уже установили необходимые модули и настроили сервер Apache Solr.

Теперь нам потребуется выполнить еще несколько действий для настройки сайта:

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

2. Теперь создадим новый контент тайп Auto и добавим туда поля для цвета и фирмы производителя.

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

3. Еще нам нужно изменить настройки индекса, чтобы он индексировал ноды с типом auto. Для этого в настройках индекса, заходим во вкладку workflow и настраиваем bundle filter.

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

4. Затем переходим во вкладку Fields и включаем поля цвет и бренд в индекс.

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

Итак, мы настроили индекс для поиска по нодам с типом auto. Теперь перейдем непосредственно к фасетам. Если вы уже включили необходимые модули и почистили кеш (это в Drupal самое главное), то в настройках индекса у вас должна была появиться новая вкладка Facets. В это вкладке вы можете включить фасетные фильтры для полей, которые добавлены в индекс. Для каждого фасета можно указать настройки, но о них немного позже. Пока что просто включим фасеты и проиндексируем наши ноды с типом auto.

Теперь нужно настроить вывод. Для каждого фасетного фильтра создается обычный блок и вы можете вывести его как вам удобно, например через регионы или панели. У фасетов есть один нюанс — для того, чтобы они отрисовались — вьюха, через которую делается запрос в Apache Solr уже должна отработать. Говоря проще — на странице следует помещать сперва вьюху с результатами, а ниже по уровню (соответственно позднее по отрисовке) блоки фасетов. После того, как я поместил блоки фасетов в регион, у меня получилась такая страничка

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

Теперь поговорим о настройках фасетов. На скриншоте вы можете увидеть форму настроек

Поиск на Drupal 7 с помощью Apache Solr ч.4 — фасетные фильтры

Рассмотрим самые важные из них:

  • Display widget — позволяет выбирать виджет для фасета. По умолчанию доступны виджеты в виде ссылок и чекбоксов. Есть еще несколько дополнительных виджетов, но он них я расскажу в следующей статье. В ней же мы научимся писать собственный виджет.
  • Сортировка — определяет по каким критериям будут сортироваться значения в блоке фасета при отображении.
  • Оператор — AND или OR. В случае с AND вы можете выбрать лишь одно значение в каждом фасете, а в случае с OR — несколько.
  • Display for searches — можно указать для каких дисплеев вьюх будет срабатывать фасет. Это может пригодиться, если у вас на одной странице несколько дисплеев с поисковой выдачей и вы хотите фильтровать лишь один из них.

Для наглядности я записал видео с примером работы фасетных фильтров

Автор: IlyinEugene

Источник

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


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