为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_花开花谢_0 2022-01-14 15:45:40
我正在使用带有搜索 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 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

我解决了这个问题。


在我的情况下,我在索引中有照片,它们有一个画廊作为实体字段,如果在照片索引中修改了画廊,它们就不会更新。因此,使用 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);

      }

    }

  }

}


查看完整回答
反对 回复 2022-01-14
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信