2013-07-30 1 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

Собственно, код, указанный в вопросе, верен, и он возвращает правильно отсортированные результаты.

Проблема, с которой я столкнулась, не связана с Эластикой и кодом, указанным в вопросе.

Оказалось, что результаты, которые я был перенастройки в моем HTML были несортированный, потому что я не возвращал мои результаты Elastica запроса, но соответствующие объекты из моей базы данных SQL, которые были получены из запроса, как это:

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

Вышеупомянутый запрос SQL не возвращает результаты в порядке идентификаторов, указанных в предложении «IN», поэтому необходимо было повторно заказать результаты SQL в соответствии с порядком моих результатов ElasticSearch (что я сделал с операторами foreach). Если бы я использовал MySQL, я мог бы использовать ORDER BY FIELD(id, \[ids in order\]), чтобы получить результаты SQL в том же порядке, что и идентификаторы, указанные в предложении IN.

Смежные вопросы