我在Elasticsearch中有以下映射:
PUT /traffic-data
{
"mappings": {
"traffic-entry": {
"_all": {
"enabled": false
},
"properties": {
"CameraId": {
"type":"keyword"
},
"VehiclePlateNumber": {
"type":"keyword"
},
"DateTime": {
"type":"date"
}
}
}
}
}
我想计算每月有多少天车辆停留。 VehiclePlateNumber
标识了一种独特的车辆。
所以,我希望得到这样的结果:
VehiclePlaneNumber Month StayDays
111 1 5
222 1 1
...
如何使用Elasticsearch查询?
这就是我的尝试:
GET traffic-data/_search?
{
"size": 0,
"aggs":{
"by_district":{
"terms": {
"field": "VehiclePlateNumber",
"size": 100000
},
"aggs": {
"by_month": {
"terms": {
"field": "DateTime",
"size": 12
}
}
}
}
}
}
答案 0 :(得分:0)
你可以在车牌号码上进行术语聚合,然后在月份上执行术语子聚合,然后在天数上进行总和子聚合。
类似的东西:
GET traffic-data/_search
{
"size": 0,
"aggs":{
"by_district":{
"terms": {
"field": "VehiclePlateNumber",
"size": 100000
},
"aggs": {
"by_month": {
"terms": {
"field": "DateTime",
"size": 12
},
"aggs": {
"days": {
"sum": {
"field": "days"
}
}
}
}
}
}
}
}
月份应该是一个脚本字段,但最好在索引时计算它。
这应该有效。
或者您可以使用以实体为中心的设计并定期索引计算出的值。见partitioning a dataframe