如何按elasticsearch中的字段聚合数据?
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"
}
}
但我想要的是 max_date 每个 "pc": "lpt001", "lpt002".
有什么方法可以将 max_date 拆分为 "pc" 字段?我读了一些关于桶聚合的东西,但我没有得到结果。
谢谢
是的,您可以像这样对 pc
字段使用 terms
聚合,然后将 max_date
移动到 terms
的子聚合一:
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
}
}
}
}
}
}
我正在使用 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"
}
}
但我想要的是 max_date 每个 "pc": "lpt001", "lpt002".
有什么方法可以将 max_date 拆分为 "pc" 字段?我读了一些关于桶聚合的东西,但我没有得到结果。
谢谢
是的,您可以像这样对 pc
字段使用 terms
聚合,然后将 max_date
移动到 terms
的子聚合一:
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
}
}
}
}
}
}