[英]How to aggregate data by an field in elasticsearch?
我正在使用kibana 4.4.1,並且在Elasticsearch中,僅當PC狀態更改(打開,關閉,警告等)時,我才存儲PC的狀態
我進入Elasticsearch的數據如下:
{ "status_id":1 , "pc":"lpt001" , "date":"2016-10-25T17:49:00Z" }
{ "status_id":3 , "pc":"lpt001" , "date":"2016-10-25T15:48:00Z" }
{ "status_id":4 , "pc":"lpt002" , "date":"2016-10-25T15:46:00Z" }
{ "status_id":1 , "pc":"lpt002" , "date":"2016-10-25T12:48:00Z" }
我要獲得最新記錄,以便隨時擁有打開,關閉或有問題的PC數量。 我的查詢就像:
GET cb-2016.10.26/_search
{
"query": {
"match_all": { }
},
"sort": [
{
"date": {
"order": "desc"
}
}
],
"aggs": {
"max_date":{
"max": {
"field": "date"
}
}
}
}
結果是:
"aggregations": {
"max_date": {
"value": 1477417680000,
"value_as_string": "2016-10-25T17:48:00.000Z"
}
}
但是我想要的是每個“ pc”的max_date:“ lpt001”,“ lpt002”。
有什么方法可以通過“ pc”字段分割max_date? 我閱讀了一些有關存儲桶聚合的信息,但未達到結果。
謝謝
是的,您可以使用pc
字段的terms
聚合來做到這一點,然后將max_date
移至terms
one的子聚合:
POST cb-2016.10.26/_search
{
"query": {
"match_all": { }
},
"sort": [
{
"date": {
"order": "desc"
}
}
],
"aggs": {
"pcs": {
"terms": {
"field": "pc"
},
"aggs": {
"max_date":{
"max": {
"field": "date"
}
}
}
}
}
}
最終查詢如下:
{
"query": {
"match_all": { }
},
"aggs" : {
"pcstatus" : {
"terms" : {
"field" : "pc"
},
"aggs": {
"top_date_hit": {
"top_hits": {
"sort": [
{
"date": {
"order": "desc"
}
}
],
"size" : 1
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.