2013-07-30 38 views
0

我試圖讓搜索結果排序,但我只是得到下面的代碼未排序的結果(在這個例子中我查詢的結果):如何使Elastica Query排序工作?

$query = new \Elastica\Query(); 
$query->setSort(array('id' => array('order' => 'desc'))); 
$resultSet = $type->search($query); // where $type is an elastica type object 
$results = $resultSet->getResults(); 

僅供參考,我使用的是FOSElasticaBundle與Symfony2項目(使用$type = $this->container->get('fos_elastica.index.website.myType');),但這不應該有所作爲。

如果我直接在瀏覽器上用http://localhost:9200/website/myType/_search?sort=id:desc&pretty=true進行查詢,我會得到正確排序的結果。

回答

1

其實,問題中給出的代碼是正確的,它確實返回正確的排序結果。

我遇到的問題與Elastica和問題中給出的代碼無關。

原來,我在我的HTML重新調整的結果,因爲我沒有給我回彈性曲線查詢的結果,但是從我的SQL數據庫中的相應對象從查詢得到像這樣的是未經分類:

SELECT * FROM ... 
WHERE id IN([ids from Elastica results in order]) 

上述SQL查詢不會按照「IN」子句中給出的ID的順序返回結果,因此有必要重新排序SQL結果以匹配我的ElasticSearch結果(我使用foreach語句)的順序。如果我一直在使用MySQL,我可以使用ORDER BY FIELD(id, \[ids in order\])以與IN子句中提供的ID相同的順序獲取SQL結果。