2017-10-12 41 views
0

Je souhaite écrire une requête permettant de détecter si une personne (identifiée par PersonId) a visité une ville au moins 1 fois par mois pendant 2 mois consécutifs au cours des 3 derniers mois. Est-il possible d'utiliser le langage de requête Elasticsearch?Comment vérifier que les événements se sont produits pendant 2 mois consécutifs au cours des 3 derniers mois?

Je peux compter le nombre de fois qu'une personne a visité une ville par mois. Cependant, je ne sais pas comment calculer que les visites ont eu lieu au cours des 3 derniers mois pendant 2 mois consécutifs.

GET visits/_search? 
{ 
"size":0, 
"query": { 
    "bool": { 
     "must": [ 
     { "match": { 
      "PersonId": "AAA" 
     }} 
     ] 
    } }, 
    "aggs": { 
    "visit_days": { 
    "terms" : { 
     "field": "Month" 
    } 
    } 
    } 
} 

En plus Month (il est une chaîne), j'ai aussi Year et Date (ce qui est le type de date).

Répondre

0

Si vous pouvez gérer la logique d'analyse d'un histogramme de date dans une application, ce serait probablement le meilleur scénario.

Voici un exemple de la façon dont vous obtenir au moins des seaux pour cette information:

GET visits/_search 
{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "filter": { 
     "range": { 
      "visit_days": { 
      "gte": "now-3M" 
      } 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "histo": { 
     "date_histogram": { 
     "field": "visit_days", 
     "interval": "month" 
     } 
    } 
    } 
} 

Et un exemple de sortie:

{ 
     "key_as_string": "2017-08-01T00:00:00.000Z", 
     "key": 1501545600000, 
     "doc_count": 1 
    }, 
    { 
     "key_as_string": "2017-09-01T00:00:00.000Z", 
     "key": 1504224000000, 
     "doc_count": 0 
    }, 
    { 
     "key_as_string": "2017-10-01T00:00:00.000Z", 
     "key": 1506816000000, 
     "doc_count": 1 
    } 

Et pour répondre à vos besoins, analyser cette réponse et faire Quelque chose de simple comme vérifier le compte du 2 au mois dernier pour 0 (en supposant que la restriction de 3 mois est statique).