Home > Software design >  Getting a timestamp exception when I try to update an unrelated field using painless in elasticsearc
Getting a timestamp exception when I try to update an unrelated field using painless in elasticsearc

Time:12-08

Im trying to run the following script

POST /data_hip/_update/1638643727.0
{
  "script":{
    "source":"ctx._source.avgmer=4;"
  }
}

But I am getting the following error.

{
  "error" : {
    "root_cause" : [
      {
        "type" : "mapper_parsing_exception",
        "reason" : "failed to parse field [@timestamp] of type [date] in document with id '1638643727.0'. Preview of field's value: '1.638642742E12'"
      }
    ],
    "type" : "mapper_parsing_exception",
    "reason" : "failed to parse field [@timestamp] of type [date] in document with id '1638643727.0'. Preview of field's value: '1.638642742E12'",
    "caused_by" : {
      "type" : "illegal_argument_exception",
      "reason" : "failed to parse date field [1.638642742E12] with format [epoch_millis]",
      "caused_by" : {
        "type" : "date_time_parse_exception",
        "reason" : "Failed to parse with all enclosed parsers"
      }
    }
  },
  "status" : 400
}

this is strange because on queries (not updates) the date time is parsed fine. The timestamp field mapping is as follows

"@timestamp": {
        "type":"date",
        "format":"epoch_millis"
},

I am running elasticsearch 7

EDIT: Adding my index settings

{
  "data_hip" : {
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "data_hip",
        "creation_date" : "1638559533343",
        "number_of_replicas" : "1",
        "uuid" : "CHjkvSdhSgySLioCju9NqQ",
        "version" : {
          "created" : "7150199"
        }
      }
    }
  }
}

Im not running an ingest pipeline

CodePudding user response:

The problem is the scientific notation, the 'E12' suffix, being in a field that ES is expecting to be an integer.

Using this reprex:

PUT so_test
{
  "mappings": {
    "properties": {
      "ts": {
        "type": "date",
        "format": "epoch_millis"
      }
    }
  }
}

# this works
POST so_test/_doc/
{
  "ts" : "123456789"
}

# this does not, throws the same error you have IRL
POST so_test/_doc/
{
  "ts" : "123456789E12"
}

I'm not sure how/where those values are creeping in, but they are there in the document you are passing to ES.

  • Related