繁体   English   中英

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

[英]How do I mark content entities as dirty in Drupal 7 Search API module

我正在使用Drupal 7和搜索API。 我知道搜索api的“常见陷阱”之一是“相关实体中的更改不会导致重新编制索引”。 我在搜索api索引中将一个名为“集合引用”的字段引入为“ type = content”。 因此,当集合的标题更改时,搜索API不会意识到它也会更改。 我试图使用讨论的规则模块对它进行排序-https: //www.drupal.org/docs/7/modules/search-api/getting-started/common-pitfalls#indirect-changes-但我尚未能够使其工作。 有人对这种技术有好运吗?

我解决了这个问题。

在我的情况下,我在索引中有照片,并且它们具有作为实体字段的画廊,并且如果在照片索引中对其进行了修改,画廊就不会更新。 因此,使用SQL抓取了与该画廊有关的所有照片,然后将其放入脏ID数组中。 所以下面的代码:

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);
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM