2 votes

Elasticsearch : compter les documents à partir de la correspondance de la requête

Je voudrais obtenir le nombre de documents qui correspondent à une chaîne de caractères spécifique dans un intervalle de temps donné.

Comment puis-je spécifier une plage de temps à partir de cette requête ?

GET myindex/_count
{
  "query": {
            "match" : {
            "log" : "ERROR"
        }
  }
}

Pour obtenir une fourchette de temps :

{
  "query": {
    "range": {
      "msgSubmissionTime": {
        "gte": "now-10m",
        "lt": "now"
      }
    }
  }
}

Existe-t-il un moyen de combiner les deux requêtes ?

1voto

Green Points 859

Les gars au-dessus de moi ont raison, mais ils ont tous les deux ajouté une redondance. [ , ] pour le must ce qui implique une requête de plus d'un champ de correspondance.

GET _search
{
  "query": {
    "bool" : {
      "must" : {
        "match" : {  "log": "ERROR" }
      },
     "filter": 
        {
          "range": {
            "msgSubmissionTime": {
               "gte": "now-10m",
               "lte": "now"
            }
          }
        }
    }
  }
}

0voto

Oleksii Baidan Points 381

Bien sûr que vous pouvez. Vous pouvez le faire de deux manières : avec le filtrage et la requête booléenne.

Elastic recommande d'utiliser les filtres pour préfiltrer les résultats - ils sont plus rapides que les requêtes.

Les requêtes booléennes peuvent regrouper différentes requêtes par les opérateurs AND, OR, NOT.

Dans les documents officiels d'Elastic, vous pouvez trouver un exemple qui correspond presque à votre question -. documentation sur l'elasticsearch

Donc votre requête sera du genre :

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "log": "ERROR"
          }
        }
      ],
      "filter": {
        "range": {
          "msgSubmissionTime": {
            "gte": "now-10m",
            "lte": "now"
          }
        }
      }
    }
  }
}

0voto

Ashwani Shakya Points 330

Essayez ceci.

{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "msgSubmissionTime": {
            "gte": "now-10m",
            "lt": "now"
          }
        }
      },
      "must": [
        {
          "term": {
            "log" : "ERROR"
          }
        }
      ]
    }
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X