Painless Reindex Script saving long as integer

Hi all,

I am trying to use a painless script as part of a reindex to multiply a long by a number, and then save it as the source field. However, when the new value is saved it is saved as an integer instead of a long resulting in an overflow, and thus a messed up number. Does anyone have any ideas on this? I wasn't able to find much on Google about this issue.

Here is an example mapping:

{
  "properties": {
    "telephony": {
      "properties": {
        "duration": {
          "type": "long"
        }
      }
    }
  }
}

Here is an example input doc:

{
  "telephony.duration": 48
}

Here is the script that is being run:

if (ctx._source.telephony.duration != null && ctx._source.telephony.duration > 0) { long duration = ctx._source.telephony.duration*1000000000; ctx._source.telephony.duration = (long)duration; }

Here is the output that I get:

{
  "telephony.duration": 755359744
}

Clearly the output has been added as an integer rather than a long, as the output number isn't even possible if it were executing the math correctly. What I don't understand is how/why this is happening, as everything that I can see should result in a long output.

I was able to figure this out. I needed to add (long) to the multiplication part so that it would be treaty as a long from the start.

The working script is:

if (ctx._source.telephony.duration != null && ctx._source.telephony.duration > 0) { long duration = (long)ctx._source.telephony.duration*1000000000; ctx._source.telephony.duration = (long)duration; }

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