查询获取平均速度
Query for getting average velocity
我在 Elasticsearch 中有以下映射:
PUT my_index
{
"mappings": {
"my_entry": {
"_all": {
"enabled": false
},
"properties": {
"RouteId": {
"type":"keyword"
},
"Date": {
"type":"date"
},
"Velocity": {
"type":"double"
}
}
}
}
}
我想知道 RouteId
等于 1 的路线的平均速度。不应将平均速度计算为平均值或中位数,因为我可能具有以下速度值分布:
Y轴:绝对频率,X轴:速度值范围。
因此我想计算平均速度作为具有最高频率的值(Y 轴的最大值)。例如,在上面的示例中,范围 45-50
的频率最高。所以,平均速度应该是 (45+50)/2 = 47.5.
如何使用Elasticsearch的查询语言来实现?
更新:
我写了下面的查询,但它并不完全符合我的要求。平均速度出现偏差。但是,我想通过计算桶的频率来获得平均速度,如上图所示。
POST my_index/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{"term": {"RouteId": "2"}}
]
}
},
"aggs" : {
"AvgVelocity" : { "avg" : { "field" : "Velocity" } }
}
}
由于所有桶的大小都相同,因此您可以使用大小为 5 的 histogram
桶聚合和 avg
子聚合。然后,您可以按 AverageVelocity
聚合的降序排列直方图桶,顶部的第一个桶将是您要查找的值。
{
"query": {
"bool": {
"filter": [
{"term": {"RouteId": "2"}}
]
}
},
"aggs" : {
"prices" : {
"histogram" : {
"field" : "Velocity",
"interval" : 5,
"order" : { "AvgVelocity" : "desc" }
},
"aggs": {
"AvgVelocity": {
"avg": {
"field": "Velocity"
}
}
}
}
}
}
我在 Elasticsearch 中有以下映射:
PUT my_index
{
"mappings": {
"my_entry": {
"_all": {
"enabled": false
},
"properties": {
"RouteId": {
"type":"keyword"
},
"Date": {
"type":"date"
},
"Velocity": {
"type":"double"
}
}
}
}
}
我想知道 RouteId
等于 1 的路线的平均速度。不应将平均速度计算为平均值或中位数,因为我可能具有以下速度值分布:
Y轴:绝对频率,X轴:速度值范围。
因此我想计算平均速度作为具有最高频率的值(Y 轴的最大值)。例如,在上面的示例中,范围 45-50
的频率最高。所以,平均速度应该是 (45+50)/2 = 47.5.
如何使用Elasticsearch的查询语言来实现?
更新:
我写了下面的查询,但它并不完全符合我的要求。平均速度出现偏差。但是,我想通过计算桶的频率来获得平均速度,如上图所示。
POST my_index/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{"term": {"RouteId": "2"}}
]
}
},
"aggs" : {
"AvgVelocity" : { "avg" : { "field" : "Velocity" } }
}
}
由于所有桶的大小都相同,因此您可以使用大小为 5 的 histogram
桶聚合和 avg
子聚合。然后,您可以按 AverageVelocity
聚合的降序排列直方图桶,顶部的第一个桶将是您要查找的值。
{
"query": {
"bool": {
"filter": [
{"term": {"RouteId": "2"}}
]
}
},
"aggs" : {
"prices" : {
"histogram" : {
"field" : "Velocity",
"interval" : 5,
"order" : { "AvgVelocity" : "desc" }
},
"aggs": {
"AvgVelocity": {
"avg": {
"field": "Velocity"
}
}
}
}
}
}