0

我想以这种方式配置 Drupal 的搜索 API,以便可以索引(和搜索)由段落引用的实体类型(Person),而该段落由另一个实体类型(文章)引用。

那是大约。我有的。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 可以做到这一点吗?如果是,如何?我从哪种内容类型开始?我需要使用反向引用字段吗?

4

1 回答 1

0

Search API模块允许其他模块(在您的情况下是自定义模块)提供可以通过实现处理器插件来索引的附加属性。然后这些属性将像搜索索引的“添加字段”表单上的“正常”属性一样列出。

这种处理器的最简单示例是“URL 字段”处理器,它添加了“URI”字段(可以在“常规”数据源部分中找到)。您可以在此处查看该处理器代码的最新版本。

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

这是另一个有用的链接:使添加新属性/字段更多地成为处理器的一流操作


这里快速总结一下你需要什么:

  1. 创建自定义模块
  2. 在这个模块上新建一个 search_api 的 Processos Plugin

    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 管理中)

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

于 2019-01-30T17:30:41.243 回答