Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse Date from Script_Fields Params

I am trying to find the elapsed time elapsed time: duration of time b/w now and createdTime

To pass the current_time (ie now) I have added it to the params, and I can access that in the source field by writing params['now'] The problem is that this value of params['now'] is a string and not of type date

The below example works as I have added doc['updatedTime'], in place of params['now'] how can I get it to work with params['now']

WORKING

GET entity.incident_action_item/_search
{
  "script_fields": {
    "timeElapsed": {
      "script": {
        "source": "doc['updatedTime'].value.toInstant().getEpochSecond() - doc['createdTime'].value.toInstant().getEpochSecond()",
        "params": {
          "now": "2022-03-31T17:18:28.153+0530"
        }
      }
    }
  }
}

NOT WORKING

GET entity.incident_action_item/_search
{
  "script_fields": {
    "timeElapsed": {
      "script": {
        "source": "params['now'].value.toInstant().getEpochSecond() - doc['createdTime'].value.toInstant().getEpochSecond()",
        "params": {
          "now": "2022-03-31T17:18:28.153+0530"
        }
      }
    }
  }
}

I have tried multiple combinations and tried different methods supported by the painless language, I was not able to get it work

I faced one or the other exception

like image 920
Prashant Meena Avatar asked May 09 '26 03:05

Prashant Meena


2 Answers

Tldr;

It is a format issue.

The params[now] holds a string type value. You need to convert the string into a ZonedDateTime or DateTime.

String to ZonedDateTime

I have been using the painless Lab available in to run the following code.

String datetime = "2022-03-31T17:18:28.153+0530";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSxxxx");
ZonedDateTime zdt = ZonedDateTime.parse(datetime, dtf);
return zdt;
like image 89
Paulo Avatar answered May 12 '26 12:05

Paulo


POST _reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": """
      String dateTime = ctx._source.createDateTimeStr;
      
      
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS").withZone(ZoneId.systemDefault());
        ZonedDateTime date = ZonedDateTime.parse(dateTime, df);
          DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
  ctx._source.createDateTime = date.format(df2)

""",
    "lang": "painless"
  }
}
like image 23
取一个好的名字 Avatar answered May 12 '26 12:05

取一个好的名字