Как написать скриптовое поле для вложенных файлов в Кибане (7.6) - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок ie в Elasticsearch и Kibana, и я хочу написать сценарий поля, чтобы получить значение вложенного поля. Я попробовал следующее, но это не сработало.

doc ['dadatas.datas_name.keyword: pressure']. Value

Я хочу получить значение давления для каждый делает c (запись).

Вывод должен быть 12,56

Мой do c выглядит следующим образом.

Заранее спасибо !!

{
  "_index":"process_data",
  "_type":"_doc",
  "_id":"UzFHVDM1MTAxMTk5QSAyMDAyMDAwOTUzN19TVDNBMjBfU1QzQTIwMTAwXzIwMjAtMDItMThUMTk6NDc6MzM=",
  "_version":1,
  "_score":1,
  "_source":{
    "eid":"",
    "line":"Line 1",
    "equipment":"Equipment 1",
    "ladderver":"",
    "registrydate":"2020-02-18T19:47:33",
    "registryutcdate":"2020-02-18T10:47:33",
    "setupid":"",
    "workid":"2345743",
    "datas":[
      {
        "datas_id":"001",
        "name":"cycletime",
        "value":"13.9"
      },
      {
        "datas_id":"002",
        "name":"machinetime",
        "value":"10.7"
      },
      {
        "datas_id":"003",
        "name":"pressure",
        "value":"12.56"
      }
    ]
  }
}

1 Ответ

1 голос
/ 29 апреля 2020
{
  "script_fields": {
    "pressure": {
      "script": {
        "source": "for(item in params._source.datas){ if(item.name=='pressure')return item.value;} return '';"
      }
    }
  }
}

Поля скрипта рассчитываются на лету. Поэтому лучшим вариантом было бы извлечь поле из inner_hits

Запрос:

{
  "query": {
    "nested": {
      "path": "datas",
      "query": {
        "term": {
          "datas.name.keyword": {
            "value": "pressure"
          }
        }
      },
      "inner_hits": {}
    }
  }
}

Результат:

"hits" : [
      {
        "_index" : "index5",
        "_type" : "_doc",
        "_id" : "kf6xw3EB8jeMa7x6RMwZ",
        "_score" : 0.9808291,
        "_source" : {
          "eid" : "",
          "line" : "Line 1",
          "equipment" : "Equipment 1",
          "ladderver" : "",
          "registrydate" : "2020-02-18T19:47:33",
          "registryutcdate" : "2020-02-18T10:47:33",
          "setupid" : "",
          "workid" : "2345743",
          "datas" : [
            {
              "datas_id" : "001",
              "name" : "cycletime",
              "value" : "13.9"
            },
            {
              "datas_id" : "002",
              "name" : "machinetime",
              "value" : "10.7"
            },
            {
              "datas_id" : "003",
              "name" : "pressure",
              "value" : "12.56"
            }
          ]
        },
        "inner_hits" : {
          "datas" : {
            "hits" : {
              "total" : {
                "value" : 1,
                "relation" : "eq"
              },
              "max_score" : 0.9808291,
              "hits" : [
                {
                  "_index" : "index5",
                  "_type" : "_doc",
                  "_id" : "kf6xw3EB8jeMa7x6RMwZ",
                  "_nested" : {
                    "field" : "datas",
                    "offset" : 2
                  },
                  "_score" : 0.9808291,
                  "_source" : {
                    "datas_id" : "003",
                    "name" : "pressure",
                    "value" : "12.56"
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }

РЕДАКТИРОВАТЬ 1: Мой ответ был на запрос в инструментах разработки. Для поля сценария шаблона индекса необходимо добавить ниже

for(item in params._source.datas)
{
    if(item.name=='pressure'){
      return item.value;
   }
}
return 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...