2014-02-17 22 views
3

我在我的項目中使用FOSElasticaBundle搜索我的Player實體。正如我只想搜索實體上的值1財產isactive,我也跟着上的文檔「篩選結果和執行默認查詢」:FriendsOfSymfony/FOSElasticaBundle/README.md排序在FOSElasticaBundle

$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); 

我包的構造看起來如下:

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: ~ 

現在我想做一些排序並削減限制和抵消的結果。我怎樣才能做到這一點?

我發現像

$finalQuery = new \Elastica\Query($boolQuery); 
$finalQuery->setSort(array('price' => array('order' => 'asc'))); 

的解決方案,但我沒有一個彈性曲線\查詢對象和AbstractQuery不支持這個方法。相同

$elasticaQuery->addSort($sort); 

怎麼辦?在哪裏閱讀? ://

(另外,如果我們已經在這裏:這是什麼{升壓:3}?真正做到完全一致)

+0

Elasticsearch正在搜索中提升重要性,而Elasticsearch正在搜索https://www.elastic.co/guide/en/elasticsearch/guide/current/query-time-boosting.html –

回答

9

,你必須創建一個通用的彈性曲線\查詢()對象。 然後,您可以使用 - > addSort($ sort)將排序添​​加到此查詢中。

然後,您可以使用 - > setQuery()分配正確的查詢。

你的榜樣應該是這樣的

$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); 

加速可以讓你做一個領域比其他更\不太重要的一個查詢中。

+0

作品如魅力,非常感謝! – humpdi

+0

爲了讓我們有訂單的工作,我們必須包括我們想訂購的東西。有沒有辦法避免這種情況?否則,如果我們想通過ID命令,那麼ID也可搜索 – cellulosa

+0

@cellulosa也許這適合您的用例http://stackoverflow.com/questions/17051709/no-mapping-found-for-field-in-order彈性搜索排序 – tuxone