Как получить значение во вложенном поле с помощью скриптового поля Kibana? - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в Elasti c Stack. Здесь я пытаюсь получить значение для «давления», а затем преобразовать его в numeri c value (string⇒numeri c), используя поле сценария 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;

1 Ответ

1 голос
/ 29 мая 2020

Вы можете использовать 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;
...