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

时间:2019-01-29 16:28:42

标签: drupal drupal-8 drupal-search

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

大约。我有的。文章和人物是内容类型。编辑文章让您选择一个具有特定角色的人,该人另存为段落。到目前为止一切都很好!

                         +-----------+
                         | 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的Search API可以做到吗?如果是的话,怎么办?我应从哪种内容类型开始?我需要使用反向引用字段吗?

1 个答案:

答案 0 :(得分:0)

搜索API 模块允许其他模块(根据您的情况选择一个)提供可通过实现处理器插件建立索引的其他属性 >。然后,这些属性将像搜索索引的“添加字段”表单上的“常规”属性一样列出。

此类处理器的最简单示例是“ URL字段”处理器,该处理器添加了“ URI”字段(可以在“常规”数据源部分中找到)。您可以查看该处理器的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_module/src/Plugin/search_api/processor/AddPersonName.php

    下的 my_module 上的文件
    <?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. 在Search API索引中配置新的插件(因此在您的Drupal管理中)

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