2017-08-09 2 views
0

J'essaie de créer une requête pour compter les instances où deux conditions sont remplies au cours du dernier jour.Requête Elasticsearch avec plusieurs conditions et plage de temps

Cette requête montre le compte pour les deux conditions, mais lorsque je tente d'ajouter une plage dans, il semble correspondre à tous les documents:

GET logstash-*/_count 
    { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "rawmsg": { 
       "query": "Could not send Message.", 
       "type": "phrase" 
       } 
       } 
      }, 
      { 
       "match": { 
       "stack_trace": { 
        "query": "*WebServiceException*", 
        "type": "phrase" 
        } 
       } 
      } 
      ] 
     } 
     } 

} 

Voilà comment je suis en train d'ajouter la plage de dates:

GET logstash-*/_count 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "rawmsg": { 
      "query": "Could not send Message.", 
      "type": "phrase" 
      } 
      } 
     }, 
     { 
      "match": { 
      "stack_trace": { 
       "query": "*WebServiceException*", 
       "type": "phrase" 
       } 
      } 
     }, 
     { 

      "range" : { 
      "@timestamp" : { 
       "gte" : "now-1d/d", 
       "lt" : "now/d" 
      } 
     } 
     } 
     ] 
    } 
    } 

} 

Répondre

0

Vous utilisez une clause should au lieu d'une clause must, qui combine efficacement vos conditions avec un OR au lieu d'un AND.

L'horodatage doit également être now/d-1d pour la requête de plage.

0

j'ai fini par trouver deux façons d'accomplir ce que je avais besoin:

GET logstash-*/tcp_input/_count?q=stack_trace: *WebServiceException* AND rawmsg: "Could not send Message" AND @timestamp: [ now-30d TO now ] 

and 

GET logstash-*/_count 
{ 
    "query": { 
    "query_string": { 
     "query": """stack_trace: *WebServiceException* AND rawmsg: "Could not send Message" AND @timestamp: [ now-3d TO now]""", 
     "analyze_wildcard": true 
    } 
    } 
}