我正在尝试对搜索结果进行排序,但我只是使用以下代码获取未排序的结果(在此示例中,我查询所有结果):
$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
直接在浏览器上进行查询,我会正确排序结果。
答案 0 :(得分:1)
实际上,问题中给出的代码是正确的,它确实返回了正确排序的结果。
我遇到的问题与Elastica和问题中给出的代码无关。
原来我在HTML中重新调整的结果是未分类的,因为我没有返回我的Elastica查询结果,而是从我的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结果。