Como passar valores para consultar externamente

Como passar valores para consultar externamente

Tenho abaixo registros semelhantes.

Eu criei um manequim indexe criei mappingcomo abaixo emdev-tools

PUT new
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type":   "date",
        "format": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    }
  }
}

e indexeddados como abaixo,

PUT /new/_doc/1
{
  "@timestamp": "2021-11-05 08:12:14.534",
  "level": "INFO",
  "id": "1",
  "text": "website is accessed",
  "status": "clicked"
}

PUT /new/_doc/2
{
  "@timestamp": "2021-10-14 09:11:14.534",
  "level": "INFO",
  "id": "3",
  "text": "website is accessed",
  "status": "clicked"
}

PUT /new/_doc/3
{
  "@timestamp": "2021-09-09 02:08:20.534",
  "level": "INFO",
  "id": "4",
  "text": "website is accessed",
  "status": "clicked"
}

Consigo buscar as contagens totais usando requesta consulta abaixo,

GET new/_search
{
  "aggs": {},
  "size": 0,
  "fields": [],
  "query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "match_phrase": {
                  "text": "website is accessed"
                }
              }
            ],
            "minimum_should_match": 1
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "2021-10-01",
              "lte": "2021-10-30"
            }
          }
        }
      ],
      "should": [],
      "must_not": []
    }
  }
}

Obtendo responsecomo abaixo,

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

Como você pode ver, preciso hardcodebuscar dateo valor de um determinado month, ou seja, buscar as mesmas informações para septo mês, preciso modificar date time rangeconforme abaixo na solicitação curl,

"range": {
  "@timestamp": {
    "gte": "2021-09-01",
    "lte": "2021-09-30"
    }
    }

Abaixo está o curl call request.

curl -u elastic:xxx  -XGET "http://10.10.10.10:9200/new/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "aggs": {},
  "size": 0,
  "fields": [],
  "query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "match_phrase": {
                  "text": "website is accessed"
                }
              }
            ],
            "minimum_should_match": 1
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "2021-10-01",
              "lte": "2021-10-30"
            }
          }
        }
      ],
      "should": [],
      "must_not": []
    }
  }
}'

Como posso passar yeare monthdinamicamente (ou seja, sem codificar a própria solicitação) para a solicitação curl que buscará as informações para aquele month, específico year?


atualizar -

Consigo obter os resultados do mês passado (novembro) ou dos últimos 2 meses (outubro) e assim por diante usando abaixo,

mês passado - Nov-

"gte": "now-M",
"lt": "now/M"

2 meses -Oct

"gte": "now-2M/M",
"lte": "now-2M/M"

Mas existe uma maneira de fornecer os resultados desejados yeare monthde recuperá-los?

Obrigado,

Responder1

Você pode usardata matemáticacom datas totalmente definidas:

"range": {
  "@timestamp": {
    "gte": "2021-10-01",
    "lte": "2021-10-01||+1M/d"
  }
}

informação relacionada