如何检测一个人在一个城市停留的天数?

How to detect the number of days that a person passed in a city?

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

您可以对车牌号进行术语聚合,然后对月份进行术语子聚合,然后对天进行总和子聚合。

类似于:

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"
              }
            }
          }
        }
      }
    }
  }
}

月份应该是一个脚本字段,但最好在索引时计算它。

应该可以。

或者您可以使用以实体为中心的设计并定期索引计算出的值。参见 https://www.elastic.co/elasticon/2015/sf/building-entity-centric-indexes