在PHP

时间:2017-06-05 13:55:06

标签: php elasticsearch

我有一个名为" arrivalDate"这个字段是一个字符串。每个文档都有一个字符串格式的到达日期(例如:20110128)。我希望我的输出是这样的(日期和具有该日期的记录数):

  

日期:该日期有多少记录

     

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中的记录数?

1 个答案:

答案 0 :(得分:0)

我建议您使用与构建查询相同的方式使用聚合,根据我的经验,它似乎更快。请参阅以下代码:

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

然后,您可以将匹配部分切换为results['hits']['hits'],而不是使用典型的results['aggregations']。然后通过访问响应中的存储区来访问返回的数据。

为了从上面显示的聚合中访问数据,它可能类似于:

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

有一种更好的方法来访问阵列中的数组,但是,上面的循环系统对我来说效果很好。如果您在访问数据时遇到任何问题,请与我们联系。