2014-05-04 124 views
1

上午使用搜索API视图模块来搜索我的apache Solr搜索引擎。我想为返回的结果进行自定义订单。我希望jq_articles结果首先出现,然后是书籍,然后是mydocuments。Drupal搜索API自定义搜索字段顺序

对于我的退货结果,该如何获得该客户订单(既不是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); 
} 
?> 

回答

4

您可以通过添加为此在hook_search_api_query_alter()如下:如果您想通过多个字段进行排序

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

,你应该这样做:

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