Scripted fields - tengo problemas con tomar la fecha del timestap

Hola
Quiero crear un campo calculado en Kibana, pero no me deja recortarlo para dejar solo la fecha, estoy tratando de hacer esto y da error:

def fecha = doc['timestamp'].value;
return fecha.substring(0,9);

Saludos,

Hola Osvaldo, bienvenido a la comunidad Elastic!!

Un timestamp no es una cadena de texto sino una fecha, lo más seguro es utilizar un método que formatea la fecha de la forma que más te convenga.

Usando elasticsearch directamente, el juego de datos de ejemplo de datos de vuelos, y la consola de Kibana, puedes ejecutar esta consulta con un campo de tipo script. El script en tu index pattern sería el contenido de source.

POST kibana_sample_data_flights/_search?size=2
{
  "_source": "timestamp",
  "script_fields": {
    "fecha": {
      "script": {
        "lang": "painless",
        "source": "return doc['timestamp'].value.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'))"
      }
    }
  }
}

Esto devolverá algo como esto:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {...},
  "hits" : {
    "total" : {...},
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "kibana_sample_data_flights",
        "_type" : "_doc",
        "_id" : "FjPbA3IB7IYpURlZTGuh",
        "_score" : 1.0,
        "_source" : {
          "timestamp" : "2020-05-04T00:00:00"
        },
        "fields" : {
          "fecha" : [
            "2020-05-04"
          ]
        }
      },
      {
        "_index" : "kibana_sample_data_flights",
        "_type" : "_doc",
        "_id" : "FzPbA3IB7IYpURlZTGuh",
        "_score" : 1.0,
        "_source" : {
          "timestamp" : "2020-05-04T18:27:00"
        },
        "fields" : {
          "fecha" : [
            "2020-05-04"
          ]
        }
      }
    ]
  }
}

Donde puedes ver qué valores devuelve para fecha. Dispones de una guía muy completa sobre el uso de pechas en painless aqui.

Muchas gracias!!! voy a probar

Hola jsanz

Ya estoy avanzando... ahora tengo este problema

ZonedDateTime zdt1 = ZonedDateTime.of(
    year, month, day, hour, minutes, seconds, nanos, ZoneId.of('UTC-06:00'));

// en este punto ya arme en la variable zdt1 una fecha a partir de un string
// en la siguiente linea estoy tratando de recuperar el campo timestamp para posteriormente hacer la diferencia en dias... pero el compilador me da error en el ".value"
ZonedDateTime zdt2 = doc['timestamp'].value;
long differenceInDays = ChronoUnit.DAYS.between(zdt1, zdt2);

¿qué error?

Listo ... solucionado ... gracias

Genial!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.