我想在ElasticSearch上存储一些移动应用版本数据,并在Kibana / Grafana上进行可视化。目的是了解应用程序版本的用法。
假设我在ElasticSearch(简化)中有这些“移动应用初始化”事件条目:
* clientId: ABC, clientVersion: 1.2.3, time: 2018-01-01
* clientId: DEF, clientVersion: 1.2.3, time: 2018-01-02
* clientId: GHI, clientVersion: 1.2.3, time: 2018-01-03
* clientId: DEF, clientVersion: 1.2.3, time: 2018-01-04
* clientId: GHI, clientVersion: 1.2.4, time: 2018-01-05
我希望在Kibana / Grafana中有一个可视化:
* version 1.2.3: 2 installations
* version 1.2.4: 1 installation
根据上述数据,ABC和DEF目前正在使用1.2.3版本。 版本1.2.4由1.2.4使用。
如果我在没有ElasticSearch的内存数据中使用某些代码,那么算法将是:
问题:
请注意,我不想使用update / upsert操作。我只想简单地将文档添加到ElasticSearch。
更新:有关此问题的更多信息。
通过这个问题,我可以看到使用top_hits
聚合可以重复数据删除:
Remove duplicate documents from a search in Elasticsearch
但是,clientId使用top_hits
进行重复数据删除,然后使用terms
按clientId进行分组是不可能的。这是因为top_hits
聚合不接受任何子聚合。 Google为[top_hits] cannot accept sub-aggregations"
这是我走了多远:
GET /metric/_search
{
"aggs" : {
"latestEntriesPerClients" : {
"terms" : { "field" : "clientid" },
"aggs": {
"1": {
"top_hits": {
"sort": [{
"date": {"order": "desc"}
}],
"size": 1
}
//, THIS WON'T WORK
// "aggs": {
// "NAME": {
// "terms": {"field": "clientVersion"}
// }
//}
}
}
}
}
}
简化输出:
* clientId: ABC, clientVersion: 1.2.3, time: 2018-01-01
* clientId: DEF, clientVersion: 1.2.3, time: 2018-01-04
* clientId: GHI, clientVersion: 1.2.4, time: 2018-01-05
现在,我如何将其传输到其他聚合中?我尝试了管道聚合,但未能将这些值分组并计算在上面。