API поиска в Drupal с абзацами и обратными ссылками
Я хотел бы настроить API поиска в Drupal таким образом, чтобы можно было индексировать (и осуществлять поиск) тип сущности (Person), на который ссылается абзац, а на этот абзац ссылается другой тип сущности (Article).
Это ок. что я имею. Статья и Персона являются типами контента. Редактируя статью, вы можете выбрать человека с определенной ролью, который будет сохранен в виде абзаца. Пока что все отлично работает!
+-----------+
| Paragraph |
+-----------+
+------> ID: 1 | +---------+
+---------+ | | P_ID: 200 <-----+ | Person |
| Article | | | ... | | +---------+
+---------+ | +-----------+ +-----+ ID: 200 |
| ID:100 | | | ... |
| P_ID: 1 +-------+ +---------+
| ... |
+---------+
+--------+------------------+
| Person | Title of Article |
+---------------------------+
| John | T1, T3, T6 |
| Alice | T2 |
| Bob | T4, T5 |
+--------+------------------+
Мне нравится иметь поисковый индекс Search-API с именем человека и связанными статьями в виде списка через запятую. (Есть люди без статей.)
Возможно ли это сделать с помощью API поиска в Drupal? И если да, то как? На каком типе контента мне начинать? Нужно ли использовать поля обратной ссылки?
1 ответ
Модуль API поиска позволяет другим модулям (пользовательским в вашем случае) предоставлять дополнительные свойства, которые можно индексировать с помощью реализации подключаемого модуля процессора. Эти свойства будут перечислены точно так же, как и "обычные" в форме "Добавить поля" поискового индекса.
Простейшим примером такого процессора является процессор "поле URL", в который добавляется поле "URI" (его можно найти в разделе "Общие" источника данных). Вы можете просмотреть последнюю версию кода этого процессора здесь.
Я не буду объяснять все решение для кодирования здесь (это довольно долго). Для этого существует документация Excellente по API поиска Drupal 8: создание настраиваемых полей с использованием настраиваемого процессора
Вот еще одна полезная ссылка: Сделайте добавление новых свойств / полей более первоклассной операцией процессоров.
Вот краткое суммирование, что вам понадобится:
- Создать пользовательский модуль
Создайте новый плагин Processos для search_api в этом модуле
Пример с файлом на my_module под
my_module/src/Plugin/search_api/processor/AddPersonName.php
<?php namespace Drupal\my_module\Plugin\search_api\processor; /** * Custom Search API processos. * * @SearchApiProcessor( * ... * ... * ... * ) */ class AddPersonName extends ProcessorPluginBase { // ... }
Определите пользовательские свойства на
AddPersonName::getPropertyDefinitions()
- Вычисление значений свойств во время индексации на
AddPersonName::addFieldValues()
- Сконфигурируйте ваш новый плагин в вашем индексе API поиска (так в вашем администрировании Drupal)
Я надеюсь, что этот урок поможет вам.