Удалите дубликаты записей из результатов просмотра с помощью пейджера с помощью API поиска - PullRequest
0 голосов
/ 21 ноября 2019

Мой проект настроен в Drupal 7, и я использую API поиска для отображения своего пользовательского результата поиска. На самом деле я хочу показать результаты поиска на основе контента двух типов контента, поэтому я настроил API поиска для этого типа контента и выбрал поля, которые я хочу найти, а затем проиндексировал контент.

Для отображения результатов поиская использую drupal вид узла типа индекса. Но проблема в том, что в моем результате поиска я получаю повторяющиеся результаты, поскольку некоторые элементы имеют одинаковые заголовки, но имеют другой основной текст.

Я хочу удалить результаты поиска с дублирующим заголовком. (Пользовательское поле, созданное мной)

Я попробовал какое-то пользовательское решение с помощью хука View, но оно не работает должным образом, его проблема с пейджером

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, но он не работает для меня.

function 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" и отличить поле от вида, но это также дает мне проблему с пейджером.

Есть идеи, как решить эту проблему?

...