我有一个名为" 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中的记录数?
答案 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']);
}
}
有一种更好的方法来访问阵列中的数组,但是,上面的循环系统对我来说效果很好。如果您在访问数据时遇到任何问题,请与我们联系。