Drupal Search API自定义搜索字段顺序

时间:2014-05-04 15:48:14

标签: drupal drupal-7 drupal-modules

我正在使用搜索api视图模块来搜索我的apache Solr搜索引擎。我想为返回的结果定制订单。我想首先出现jq_articles结果,然后是书籍,然后是mydocuments。

我如何才能获得此返回结果的客户订单(既不是ASC也不是DESC)?

我的意思是我需要像$ query-> orderby('jq_articles,'books','mydocuments');

这就是我的query_alter目前的看法:

<?php
function mymodule_search_api_query_alter(SearchApiQueryInterface $query) {
    $filters = &$query->getFilter()->getFilters();
    foreach ($filters as $i => $filter) {
        $condition="";
        $finalfilters=&$filter->getFilters();
        foreach($finalfilters as $z => $singlefilter){
                    if($singlefilter[0]=='type') {
                         $condition=$singlefilter[1];
                         unset($finalfilters[$z]);
                    }
         }
    }
          $filter = $query->createFilter('OR');
switch($condition) {
            case 'journals':
              $filter->condition('type', 'jq_articles');
              break;
            case 'books':
                $filter->condition('type', 'books');
                break;
            case 'mydocuments':
            $filter->condition('type', 'mydocuments');
            default:
            $filter->condition('type', 'mydocuments');
            $filter->condition('type', 'books');
            $filter->condition('type', 'jq_articles');
            break;
}
          $query->filter($filter);
}
?>

2 个答案:

答案 0 :(得分:4)

您可以在hook_search_api_query_alter()中添加以下内容:

$query->sort('jq_articles', 'DESC');

如果您想按多个字段排序,您应该这样做:

$query->sort('field1', 'DESC');
$query->sort('field2', 'ASC');

答案 1 :(得分:1)

作为Drupal 8/9的更新,您始终可以使用hook_search_api_query_alter

如果要取消排序标准或对排序标准重新排序,可以使用getSorts():

//$sorts becomes reference to $query->sorts
$sorts = &$query->getSorts();
//by example remove a sort criteria
  unset( $sorts['created']);