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

Posted

技术标签:

【中文标题】Drupal 的带有段落和反向引用的搜索 API【英文标题】:Drupal's Search API with Paragraphs and Reverse references 【发布时间】:2019-01-29 16:28:42 【问题描述】:

我想以这种方式配置 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 可以做到这一点吗?如果是,如何?我从哪种内容类型开始?我需要使用反向引用字段吗?

【问题讨论】:

【参考方案1】:

Search 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


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

    创建自定义模块

    在这个模块上新建一个search_api的Processos Plugin

    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 
       // ...
     
    

    AddPersonName::getPropertyDefinitions()上定义自定义属性

    在索引时计算AddPersonName::addFieldValues() 上的属性值 在您的搜索 API 索引中配置您的新插件(所以在您的 Drupal 管理中)

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

【讨论】:

乐于助人! 我也想用 title 和 nid 等索引链接节点。我怎样才能做到这一点?我发现我必须使用 EntityProcessorProperty(而不是 ProcessorProperty)。但是我需要在 addFieldValues() 中做什么?

以上是关于Drupal 的带有段落和反向引用的搜索 API的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7:如何根据当前页面内容过滤视图内容(带有实体引用字段)

Drupal 7 GeoField Proximity 使用搜索 API 索引

设置 Drupal 节点引用自动建议搜索两个单独的字段

Drupal 7搜索API挂钩注册的回调类没有被触发

Bing Search API / Drupal 8搜索结果显示更多页面和结果,然后实际可用

Drupal 8:如何编辑段落字段值?