2013-02-12 52 views
1

由於大量過濾條件(權限系統在1000)我必須使用Elastic_Query_Filtered這是很好的,我可以用於分頁甚至設置的限度使用排序的從過濾查詢

$elasticaType->search($elasticaQueryString, $options); 

結果它所有工作都很好,直到我介紹排序選項。這是我到目前爲止:

$options = array('from'=>$from, 'size'=>$to, 'sort'=>array("description" => array("order" => "asc"))); 
$elasticaResultSet = $elasticaType->search($elasticaQueryString, $options); 

我是在做一些愚蠢的或正在排序只是不受支持呢。有沒有其他選擇。使用布爾過濾器使事情達到max_clause_count

+0

你找到了解決這個問題呢? ''\ Elastica \ Query \ Filtered''沒有像常規查詢那樣有''setSort()''方法。 – Ilija 2014-09-12 14:12:19

回答

0

我用這個單查詢字符串搜索,以限制和排序

$client = new Elastica_Client(array('host' => '192.168.0.27','port' => '9200')); 

$elasticaQueryString =new Elastica_Query_QueryString(); 
$elasticaQueryString->setDefaultOperator('AND'); 
$elasticaQueryString->setQuery('100009'); // set value for where condition 
$elasticaQueryString->setFields(array('increment_id','entity_id','billing_name')); // set where fields 

$elasticaQuery = new Elastica_Query(); 
$elasticaQuery->setQuery($elasticaQueryString); // set query string 
$elasticaQuery->setFields(array('increment_id','entity_id','billing_name','created_at')); // set output fields 

$elasticaQuery->setFrom(0); //set from point 
$elasticaQuery->setLimit(20); //limit the record 
$sort = array("entity_id" => array("order" => "asc")); //order by clause 

$elasticaQuery->setSort($sort); //set Sorting 

echo "<br />".json_encode($elasticaQuery->toArray())."<br />"; //print the query 

$search = new Elastica_Search($client); // Create the search object and inject the client 
$resultSet = $search->addIndex('sales')->addType('order')->search($elasticaQuery); // Configure and execute the search 

echo "<br /><strong>Total Results Found : ".$totalResults= $resultSet->getTotalHits()."</strong><br />";   //get total result found 

$data=$resultSet->getResults(); //extract the result 

$result=array(); 

foreach ($data as $data1) 
{ 
    $result[]=$data1->getData(); 
} 

print_r($result);