2017-10-12 36 views
0

J'ai la correspondance suivante dans ElasticSearch:Comment détecter le nombre de jours passés dans une ville?

PUT /traffic-data 
{ 
    "mappings": { 
     "traffic-entry": { 
     "_all": { 
     "enabled": false 
     }, 
     "properties": { 
      "CameraId": { 
      "type":"keyword" 
      }, 
      "VehiclePlateNumber": { 
      "type":"keyword" 
      }, 
      "DateTime": { 
      "type":"date" 
      } 
     } 
     } 
    } 
} 

Je veux calculer combien de jours par mois est un véhicule resté. Un véhicule unique est identifié par VehiclePlateNumber. Donc, je veux obtenir quelque chose de résultat comme celui-ci:

VehiclePlaneNumber Month StayDays 
111     1  5 
222     1  1 
... 

Comment puis-je le faire en utilisant la requête ElasticSearch?

C'est ce que j'ai essayé:

GET traffic-data/_search? 
{ 
"size": 0, 
    "aggs":{ 
    "by_district":{ 
     "terms": { 
     "field": "VehiclePlateNumber", 
     "size": 100000 
     }, 
     "aggs": { 
     "by_month": { 
      "terms": { 
      "field": "DateTime", 
      "size": 12 
      } 
     } 
     } 
    } 
    } 
} 
+0

Veuillez coller les données d'échantillon pour 111, 222 VehiclePlaneNumber à analyser. –

Répondre

0

Vous pouvez faire des termes d'agrégation sur le numéro de plaque du véhicule, puis un sous agg termes de mois, puis une somme sous agg jours.

Quelque chose comme:

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

mois devrait être un champ scénarisé mais serait préférable de le calculer au moment de l'index.

Cela devrait fonctionner. Ou vous pouvez utiliser la conception centrée sur l'entité et indexer régulièrement cette valeur calculée. Voir https://www.elastic.co/elasticon/2015/sf/building-entity-centric-indexes

+0

Eh bien, en effet, j'ai aussi sfield 'Month' et' Monthday' qui sont extraits de 'DateTime'. Pourriez-vous s'il vous plaît montrer comment faire la somme des sous-titres les jours? – Dinosaurius