我有一些基于时间的嵌套数据,我希望每月plugins
获得最大的正面和负面变化。我使用Elasticsearch 5.3(和Kibana 5.3)。
文件结构如下:
{
_id: "xxx",
@timestamp: 1508244365987,
siteURL: "www.foo.bar",
plugins: [
{
name: "foo",
version: "3.1.4"
},
{
name: "baz",
version: "13.37"
}
]
}
但是,根据id(siteURL
),我每月有多个条目,我想只使用最新的每次桶,以避免不公平的称量。
我试图通过使用以下聚合来解决这个问题:
{
"aggs": {
"normal_dates": {
"date_range": {
"field": "@timestamp",
"ranges": [
{
"from": "now-1y/d",
"to": "now"
}
]
},
"aggs": {
"date_histo": {
"date_histogram": {
"field": "@timestamp",
"interval": "month"
},
"aggs": {
"top_sites": {
"terms": {
"field": "siteURL.keyword",
"size": 50000
},
"aggs": {
"top_plugin_hits": {
"top_hits": {
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
],
"_source": {
"includes": [
"plugins.name"
]
},
"size": 1
}
}
}
}
}
}
}
}
}
}
现在我每个月都会得到最新的网站及其插件。接下来我想把数据翻出来,每个月都有插件和事件的计数。然后我会使用serial_diff比较几个月。
但是,我不知道如何从聚合转到串行差异,即将数据翻出来。
欢迎任何帮助
PS:如果我可以在Kibana 5.3表格中获得它,我将获得额外的荣誉......
答案 0 :(得分:0)
事实证明,无法进一步聚合top_hits
查询。
我最终将发布的查询结果加载到Python中,并使用Python进行进一步处理和可视化。