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: создание настраиваемых полей с использованием настраиваемого процессора

Вот еще одна полезная ссылка: Сделайте добавление новых свойств / полей более первоклассной операцией процессоров.


Вот краткое суммирование, что вам понадобится:

  1. Создать пользовательский модуль
  2. Создайте новый плагин 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 {
       // ...
     }
    
  3. Определите пользовательские свойства на AddPersonName::getPropertyDefinitions()

  4. Вычисление значений свойств во время индексации на AddPersonName::addFieldValues()
  5. Сконфигурируйте ваш новый плагин в вашем индексе API поиска (так в вашем администрировании Drupal)

Я надеюсь, что этот урок поможет вам.

Другие вопросы по тегам