带有段落和反向引用的 Drupal 搜索 API

Drupal's Search API with Paragraphs and Reverse references

我想以这种方式配置 Drupal 的搜索 API,这样就可以索引(并搜索)一个段落引用的实体类型(人),而该段落又被另一个引用实体类型(文章)。

那是大约。我有的。 Article 和 Person 是内容类型。编辑一篇文章让你选择一个特定角色的人,它被保存为段落。到目前为止所有工作都很棒!

                         +-----------+
                         | 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 搜索索引,其中包含人名和以逗号分隔的列表形式的链接文章。 (有没有文章的人。)

是否可以使用 Drupal 的搜索来做到这一点 API?如果是,怎么办?我从哪种内容类型开始?我需要使用反向参考字段吗?

Search API 模块允许其他模块(根据您的情况定制)提供可以索引的其他属性 通过 实现处理器插件 。然后,这些属性将像搜索索引的 "Add fields" 表单中的 "normal" 一样列出。

这种处理器的最简单示例是 "URL field" 处理器,它添加了 "URI" 字段(可以在 "General" 数据源部分找到) .您可以查看该处理器的最新版本 code here.

我不会在这里解释整个编码解决方案(它很长)。为此目的,Drupal 8 Search API 上有一个优秀的文档:Create custom fields using a custom processor

这里还有一个有用的link: Make adding new properties/fields more a first-class operation of processors


这里是您需要的快速总结:

  1. 创建自定义模块
  2. 在此模块上创建一个新的 search_api 的 Processos 插件

    my_modulemy_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. 上定义自定义属性
  5. AddPersonName::addFieldValues()
  6. 的索引时计算 属性 值
  7. 在您的搜索 API 索引中配置您的新插件(因此在您的 Drupal 管理中)

希望本教程对您有所帮助。