如何检测一个人在城市中过去的天数?

时间:2017-10-12 16:33:04

标签: elasticsearch lucene elasticsearch-5

我在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
          }
        }
      }
    }
  }
}

1 个答案:

答案 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

相关问题