我试图将搜索结果排序,但我只使用以下代码获得未排序的结果(在本例中,我查询所有结果):
$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在浏览器上进行查询,就会得到正确的排序结果。
发布于 2013-07-30 17:11:19
实际上,问题中给出的代码是正确的,它确实返回了正确排序的结果。
我遇到的问题与Elastica和问题中给出的代码无关。
原来,我在HTML中重新整理的结果是未排序的,因为我没有返回Elastica查询结果,而是从SQL数据库中返回从如下查询中获得的相应对象:
SELECT * FROM ...
WHERE id IN([ids from Elastica results in order])上面的SQL查询不会按照" in“子句中给出的did的顺序返回结果,因此有必要重新排序SQL结果以与我的ElasticSearch结果的顺序相匹配(我使用了foreach语句)。如果我使用的是MySQL,我可以使用ORDER BY FIELD(id, \[ids in order\])获得与in子句中提供的ids相同的顺序。
https://stackoverflow.com/questions/17952156
复制相似问题