2016-03-06 3 views
2

Привет У меня есть проблема ..Elasticsearch хранилище foselastica и группеПо

У меня есть хранилище эластика

namespace XX\xxx; 

use FOS\ElasticaBundle\Repository; 

class TestRepository extends Repository 
{ 
public function getExamples($argOne, $argTwo) { 
    $query = new BoolQuery(); 

    $matchOne = new Match(); 
    $matchOne->setField('column_one', $argOne); 
    $query->addMust($matchOne); 

    $matchTwo = new Match(); 
    $matchOne->setField('column_two', $argTwo); 
    $query->addMust($matchTwo); 

    return $this->find($query); 
    } 
} 

и картирование

... 
types: 
    example: 
     mappings: 
     column_one: 
       type: integer 
     column_two: 
       type: string 
     column_three: 
       type: date 

Моя проблема ..

I необходимо получить группу запросов по столбцу три. И я понятия не имею, как это сделать.

Я буду благодарен за информацию ..

ответ

1

Вы должны использовать Aggregations.

Пример:

use Elastica\Aggregation\Terms; 
use Elastica\Query; 

// set up the aggregation 
$termsAgg = new Terms("dates"); 
$termsAgg->setField("column_three"); 
$termsAgg->setSize(10); 

// add the aggregation to a Query object 
$query = new Query(); 
$query->addAggregation($termsAgg); 

$index = $elasticaClient->getIndex('someindex'); 
$buckets = $index->search($query)->getAggregation("dates"); 

foreach($buckets as $bucket){ 
    $statsAggResult = $bucket["column_three"]; 
    // do something with the result of the stats agg 
} 

Подробнее здесь: http://elastica.io/example/aggregations/terms.html

0

Да, но вот проблема.

Как читать эти данные? Я ищу об этом, и я нашел methos search(). Он возвращает SetResults методом getAggregations().

Но .. это вместилище .. есть метод Find() возвращает массив ...

Как получить I агрегирование в этом случае?

+0

Я добавил пример с циклом обработки данных: –

+0

ResultSet итерабелен, поэтому вы можете просто пропустить его. –

Смежные вопросы