如何在 Drupal 7 Search API 模块中将内容实体标记为脏

Posted

技术标签:

【中文标题】如何在 Drupal 7 Search API 模块中将内容实体标记为脏【英文标题】:How do I mark content entities as dirty in Drupal 7 Search API module 【发布时间】:2019-09-17 13:46:07 【问题描述】:

我正在使用带有搜索 API 的 Drupal 7。我了解搜索 api 的“常见缺陷”之一是“相关实体的更改不会导致重新索引”。我在我的搜索 api 索引中引入了一个名为 'Collection Reference' 的字段作为 'type = content' 。因此,当集合的标题发生变化时,搜索 API 不会意识到它发生了变化。 我曾尝试使用所讨论的规则模块对它进行排序 - https://www.drupal.org/docs/7/modules/search-api/getting-started/common-pitfalls#indirect-changes - 但我无法让它工作。有人对这种技术有好运吗?

【问题讨论】:

【参考方案1】:

我解决了这个问题。

在我的情况下,我在索引中有照片,并且他们有一个画廊作为实体字段,如果在照片索引中修改了画廊,则这些画廊不会更新。因此,使用 SQL 抓取与该画廊相关的所有照片,然后放入脏 ids 数组中。所以下面的代码:

function hook_entity_presave($entity, $type) 
  if ($entity->type == 'MYCONTENTTYPE') 
    if ($entity->original->title !== $entity->title) 
      $dirty_ids = array();
      $nid = $entity->nid;
      $result = db_query('SELECT g.entity_id FROM gallery g WHERE c.id = :nid', array(':nid' => $nid));

      foreach($result as $record) 
        $dirty_ids[] = $record->entity_id;
      

      if(!empty($dirty_ids)) 
        search_api_track_item_change('node', $dirty_ids);
      
    
  

【讨论】:

以上是关于如何在 Drupal 7 Search API 模块中将内容实体标记为脏的主要内容,如果未能解决你的问题,请参考以下文章

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

在 Drupal 7 中实现 Google Site Search

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

在 Drupal 7 中更改数据集的搜索查询条件

搜索日志无法跟踪 Drupal 7 查看搜索词的记录?

Apache solr 搜索结果查看 Drupal 7