如何使Elastica Query排序工作?

时间:2013-07-30 16:12:46

标签: elastica

我正在尝试对搜索结果进行排序,但我只是使用以下代码获取未排序的结果(在此示例中,我查询所有结果):

$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 个答案:

答案 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结果。