使用搜索 api 使用寻呼机从查看结果中删除重复记录

Posted

技术标签:

【中文标题】使用搜索 api 使用寻呼机从查看结果中删除重复记录【英文标题】:Remove duplicate records from view result with pager using search api 【发布时间】:2019-11-21 09:47:19 【问题描述】:

我的项目是在 Drupal 7 中设置的,我正在使用搜索 API 来显示我的自定义搜索结果。实际上我想显示基于两种内容类型内容的搜索结果,所以我已经为这些内容类型配置了搜索 api,并选择了我想要搜索的字段,然后对内容进行索引。

为了显示搜索结果,我使用了索引节点类型的 drupal 视图。但问题是,在我的搜索结果中,我得到了重复的结果,因为某些内容具有相同的标题但具有不同的正文。

我想删除标题重复的搜索结果。 (我自己创建的自定义字段)

我已经通过 View hook 尝试了一些自定义解决方案,但它无法正常工作,导致寻呼机问题

function custom_views_pre_render(&$view) 
    if ($view->name == 'search_books') 
        $view_ISBN = array();
        foreach ($view->result AS $key => $res_view) 
            $ISBN = $res_view->entity->field_isbn[und][0]['value'];
            if (!in_array($ISBN,$view_ISBN)) 
                $view_ISBN[] = $ISBN;
                unset($view->result[$key]);
            
        

        $view->query->pager->total_items = count($view->result);
        $view->query->pager->update_page_info();
     

这会删除重复的结果,但会给出错误的分页器结果。

我也尝试过 Query alter hook,但它对我不起作用。

函数 custom_query_alter($query)

if (isset($query->alterMetaData)) 
    if (isset($query->alterMetaData['view'])) 
        if($query->alterMetaData['view']->name == 'search_books') 
            $fields =& $query->getGroupBy();
                // Tried various fields to check which was the field creating the problem.

                $query->groupBy('field_isbn');
                $query->distinct = TRUE;
        
    


我还尝试安装“views_distinct”模块并将字段与视图区分开来,但它也给了我寻呼机问题。

知道如何解决这个问题吗?

【问题讨论】:

良好的代码缩进将帮助我们阅读代码,更重要的是它会帮助您调试代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。 【参考方案1】:

您可以使用分组字段来使用视图格式中的分组字段,也可以使用视图Advanced 部分中的Use aggregation

【讨论】:

以上是关于使用搜索 api 使用寻呼机从查看结果中删除重复记录的主要内容,如果未能解决你的问题,请参考以下文章

寻呼的搜索结果

iPython 是不是具有在寻呼机中查看变量的内置支持? [复制]

寻呼机 HTML 查看器

ios:从 UIScrollview 添加和删除视图

jQuery.map() 解析 select2 ajax 调用的结果

Tablesorter过滤器插件+过滤器小部件:过滤/搜索当前未显示的结果