Home > front end >  Runtime Field Script emit null value for long
Runtime Field Script emit null value for long

Time:12-14

I have a runtime field that converts a long field in milliseconds to seconds. The problem is sometimes there is no value present in that row for the field. To handle this, I added a check:

PUT /my-logs-dev/_mapping

{
    "runtime": {
      "fields.Metric.ElapsedSeconds": {
        "type": "long",
        "script": {
          "source": "if(doc['fields.Metric.ElapsedMilliseconds'].length>0) 
                         emit(Math.round(doc['fields.Metric.ElapsedMilliseconds'].value / 1000d)); 
                     else
                         emit(0);"
        }
      }
    }
}

This works, but I would much prefer to emit "no value" to match the input. This way, when we aggregate in, say, dashboards, they row is simply ignored rather then diluting the aggregate value with zeros. Appreciate any help!

CodePudding user response:

Since emit() doesn't support emitting null, you can simply remove the else section and nothing will be emitter if the field is missing

PUT /my-logs-dev/_mapping
{
    "runtime": {
      "fields.Metric.ElapsedSeconds": {
        "type": "long",
        "script": {
          "source": """if(doc['fields.Metric.ElapsedMilliseconds'].length>0) 
                         emit(Math.round(doc['fields.Metric.ElapsedMilliseconds'].value / 1000d));"""
        }
      }
    }
}
  • Related