2017-06-05 106 views
1

我有一个名为“arrivalDate”的字段,该字段是一个字符串。每个文档都有一个字符串格式的arrivalDate(例如:20110128)。我希望我的输出是这样的(日期和具有该日期的记录数):在PHP中显示来自Elasticsearch查询的所有聚合结果

日期:多条记录怎么有日期

20110105:5个记录

20120501: 2个记录

20120602:15条

我已经有查询来获取这些结果。

我想在Elasticsearch中显示PHP中的聚合结果。我希望我的输出是这样的:

日期:多条记录怎么有日期

20110105:5个记录

20120501:2条记录

20120602:15条 这是什么我到目前为止:

$json = '{"aggs": { "group_by_date": { "terms": { "field": "arrivalDate" } } } }'; 

     $params = [ 
      'index' => 'pickups', 
      'type' => 'external', 
      'body' => $json 
      ]; 

$results = $es->search($params); 

但是,我不知道如何在PHP中显示结果。例如,如果我想显示要执行的文档总数echo $results['hits']['total']如何使用PHP中记录的数量显示所有日期?

+0

你的'$ results'数组看起来像什么? – Auris

+1

@Auris它包含所有的信息,如果我已经在Kibana中运行脚本。它包含命中,总数,样本文档和一些文档的聚合 – user2896120

+0

@Auris这是数组的聚合部分,这只是一个片段:[aggregations] => Array([group_by_date] => Array([doc_count_error_upper_bound ] => 11058 [sum_other_doc_count] => 818008 [buckets] => Array([0] => Array([key] => 20160614 [doc_count] => 18462))))) – user2896120

回答

0

我会建议使用聚合以相同的方式来构建查询,从我的经验看来,它似乎工作得更快。请看下面的代码:而是采用了典型的results['hits']['hits']你会命中的部分转出到results['aggregations']

'aggs' => [ 
    'group_by_date' => [ 
     'terms' => [ 
      'field' => 'arrivalDate', 
      'size' => 500 
     ] 
    ] 
] 

随后,。然后通过访问响应中的桶来访问返回的数据。

对于从上面所示的聚合访问数据,这将可能是沿着线的东西:

foreach ($results as $result){ 
    foreach($result['buckets'] as $record){ 
     echo($record['key']); 
    } 
} 

会有然而访问阵列内的阵列,一个更好的方式中,上述环系统适合我。如果您在访问数据时遇到任何问题,请告诉我。