elasticsearch 运行时字段脚本长时间发出空值

l7mqbcuq  于 2022-12-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(158)

我有一个运行时字段,它可以将long字段的毫秒数转换为秒数,问题是有时候该行中没有该字段的值,为了处理这个问题,我添加了一个检查:

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);"
        }
      }
    }
}

这是可行的,但我更喜欢输出“no value”来匹配输入。这样,当我们在 Jmeter 板中进行聚合时,它们行将被忽略,而不是用零稀释聚合值。感谢任何帮助!

1sbrub3j

1sbrub3j1#

由于emit()不支持发射null,因此您只需删除else部分,如果缺少场,则不会有任何发射器

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));"""
        }
      }
    }
}

相关问题