Elasticsearch foselastica存储库和groupBy

时间:2016-03-06 20:42:59

标签: symfony elasticsearch elastica foselasticabundle

您好我有问题..

我有我的弹性储存库

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

我的问题是......

我需要按第三列获取查询组。我不知道该怎么做。

我会对这些信息感激不尽。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

是的,但这是问题。

如何阅读此数据? 我搜索这个,我发现了方法搜索()。它使用方法getAggregations()返回SetResults。

但..这是存储库..有方法find()返回数组...

在这种情况下如何获得聚合?