Как получить значение во вложенном поле, используя поле сценария Kibana?

Я новичок в Elastic Stack. Здесь я пытаюсь получить значение для «давления», а затем преобразовать его в числовое значение (строка ⇒ числовое), используя поле сценария Kibana. Я попробовал скриптовое поле, но у меня это не сработало.

Есть идеи? Я очень ценю вашу поддержку заранее. Одна из моих записей данных приведена ниже.

{
  "_index": "production",
  "_type": "_doc",
  "_id": "4570df7a0d4ec1b0e624e868a5861a0f1a9a7f6c35fdsssafafsa734fb152f4bed",
  "_version": 1,
  "_score": null,
  "_source": {
    "factorycode": "AM-NY",
    "productcode": "STR",
    "lastupdatetime": "2020-05-28T04:16:17.590Z",
    "@timestamp": "2020-05-28T04:14:48.000Z",
    "massproduction": {
      "errorcode": null,
      "equipment": "P17470110",
      "operatorldap": null,
      "machinetime": null,
      "quantity": "1",
      "externalfilename": null,
      "errorcomment": null,
      "datas": {
        "data": [
          {
            "value": "45.4",
            "id": "001",
            "name": "pressure"
          },
          {
            "value": "0.45",
            "id": "002",
            "name": "current"
          }
        ]
      },
      "ladderver": null,
      "eid": null,
      "setupid": null,
      "model": "0",
      "identificationtagid": null,
      "workid": "GD606546sf0B002020040800198",
      "reuse": {
        "num": "0"
      },
      "registrydate": "2020-05-28T13:14:48",
      "product": "GD604564550B00",
      "line": "STRS001",
      "judge": "1",
      "cycletime": null,
      "processcode": "OP335",
      "registryutcdate": "2020-04-28T04:14:48",
      "name": "massproduction"
    }
  },
  "fields": {
    "massproduction.registrydate": [
      "2020-05-28T13:14:48.000Z"
    ],
    "@timestamp": [
      "2020-05-28T04:14:48.000Z"
    ],
    "lastupdatetime": [
      "2020-05-28T04:16:17.590Z"
    ],
    "registrydate": [
      "2020-05-28T13:14:48.000Z"
    ],
    "massproduction.registryutcdate": [
      "2020-05-28T04:14:48.000Z"
    ],
    "registryutcdate": [
      "2020-05-28T04:14:48.000Z"
    ]
  },
  "sort": [
    158806546548000
  ]
}

Это мое "безболезненное" заскриптованное поле в Кибане.

for(item in params._source.massproduction.datas.data)
{
    if(item.name=='pressure'){
      return item.value;
   }
}
return 0;

person sami88rosh    schedule 29.05.2020    source источник
comment
проблема заключается в преобразовании строки в числовое?   -  person jaspreet chahal    schedule 29.05.2020


Ответы (1)


Вы можете использовать Float.parseFloat(value) для преобразования строки в float

if(params._source.massproduction!=null && params._source.massproduction.datas!=null &&params._source.massproduction.datas.data.size()>0)
  {
    def data = params._source.massproduction.datas.data;
     if(data instanceof ArrayList)
     {
       for(item in data)
        {
          if(item.name=='pressure')
          {
            return  Float.parseFloat(item.value);
          }
        }
     }else
     {
        if(data.name=='pressure')
        {
          return  Float.parseFloat(data.value);
        }
     }
  }
  return 0;
person jaspreet chahal    schedule 29.05.2020
comment
Спасибо за быстрый ответ. Хотя я пробовал, это дает мне следующую ошибку. Есть идеи? - person sami88rosh; 29.05.2020
comment
@aspreet chahal Еще раз спасибо. Но на этот раз он говорит: lang: безболезненный, причинный_by: { тип: незаконный_аргумент_исключение, причина: Невозможно перебрать [java.util.HashMap] - person sami88rosh; 29.05.2020
comment
@ sami88rosh Я обновил ответ, ваши данные представляют собой смесь массиваList и объекта - person jaspreet chahal; 29.05.2020
comment
@aspreet-chahal Ты потрясающий. Наконец то получилось!!!! ОГРОМНОЕ ВАМ СПАСИБО. :) :) - person sami88rosh; 29.05.2020