首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSElasticaBundle中的排序

FOSElasticaBundle中的排序
EN

Stack Overflow用户
提问于 2014-02-17 15:46:37
回答 1查看 8.9K关注 0票数 4

我在我的项目中使用FOSElasticaBundle搜索我的Player实体。由于我只想在值isactive上搜索具有属性1的实体,所以我遵循了关于“筛选结果并执行默认查询”的文档:FriendsOfSymfony/FOSElasticaBundle/README.md

代码语言:javascript
复制
$query = new \Elastica\Query\QueryString($searchterm);
$term = new \Elastica\Filter\Term(array('isactive' => true));

$filteredQuery = new \Elastica\Query\Filtered($query, $term);
$players = $this->get('fos_elastica.finder.xxx.player')->find($filteredQuery);

我的包的配置如下:

代码语言:javascript
复制
fos_elastica:
clients:
    default: { host: localhost, port: 9200 }
serializer:
    callback_class: FOS\ElasticaBundle\Serializer\Callback
    serializer: serializer
indexes:
    xxx:
        client: default
        types:
            player:
                mappings:
                    firstname: { boost: 3 }
                    lastname: { boost: 3 }
                serializer:
                    groups: [elastica, Default]
                persistence:
                    driver: orm
                    model: xxx\FrontendBundle\Entity\Player
                    listener: ~
                    provider: ~
                    finder: ~

现在我想做一些排序,用限制和偏移来减少结果。我怎样才能做到这一点?

我找到了一个解决办法

代码语言:javascript
复制
$finalQuery = new \Elastica\Query($boolQuery);
$finalQuery->setSort(array('price' => array('order' => 'asc')));

但是我没有Elastica\Query对象,而且AbstractQuery不支持这个方法。同

代码语言:javascript
复制
$elasticaQuery->addSort($sort);

该怎么办呢?在哪里阅读?//

(此外,如果我们已经在这里,那么{boost: 3}到底做了什么呢?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 16:56:08

您必须创建一个通用的Elastica\Query()对象。然后可以使用->addSort($sort)将排序添加到此查询中。

稍后,您可以使用->setQuery()分配一个适当的查询;

您的示例应该如下所示

代码语言:javascript
复制
$query = new \Elastica\Query();
$query->addSort(array('price' => array('order' => 'asc')));

$q = new \Elastica\Query\QueryString($searchterm);
$term = new \Elastica\Filter\Term(array('isactive' => true));
$filteredQuery = new \Elastica\Query\Filtered($q, $term);

$query->setQuery($filteredQuery);
$players = $this->get('fos_elastica.finder.xxx.player')->find($query);

Boost允许您使一个字段比查询中的其他字段更重要。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21833387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档