【问题标题】:How to write a scripted field for nested fileds in Kibana(7.6)如何在 Kibana(7.6) 中为嵌套字段编写脚本字段
【发布时间】:2020-04-29 18:58:39
【问题描述】:

我是 Elasticsearch 和 Kibana 的新手,我想编写一个脚本字段来获取嵌套字段值。我尝试了以下方法,但没有成功。

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

我想获取每个文档(记录)的压力值。

输出应该是 12.56

我的文档看起来像这样。

提前致谢!!

{
  "_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"
      }
    ]
  }
}

【问题讨论】:

    标签: elasticsearch kibana


    【解决方案1】:
    {
      "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;
    

    【讨论】:

    • 感谢您的回答。我在脚本文件中尝试过,但它对我不起作用。任何想法?我真的很感谢你的帮助。我已经上传了错误截图。请检查一下。
    • @jaspreet chahal 我选择了索引模式并创建了一个脚本字段。
    • 很高兴能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多