如何以编程方式创建Kibana(Elasticsearch)脚本字段?

时间:2016-09-25 18:02:23

标签: elasticsearch kibana nest

Kibana的UI允许用户创建一个脚本化字段,该字段存储为索引的一部分(下面的屏幕截图)。怎么能以编程方式完成?特别是,使用NEST客户端或Elasticsearch低级客户端。

Kibana UI for the Indice with the Scripted Fields tab highlighted

请注意,我询问如何创建添加表达式/脚本字段作为查询的一部分,我特别在寻找如何将其添加为索引的一部分时创建映射,以便查询可以引用它而无需显式包含它。

2 个答案:

答案 0 :(得分:1)

Kibana仪表板存储在.kibana索引中。要导出仪表板,您可以像查询任何其他索引一样查询Kibana索引。例如,curl -XGET http://localhost:9200/.kibana/_search?type=dashboard&pretty会显示仪表板的JSON。您可以导出模板,将脚本字段添加到JSON,然后再次POST。由于Kibana使用标准的Elasticsearch索引,因此普通的Elasticsearch API将适用于修改Kibana仪表板。 This可能会提供更多说明。

答案 1 :(得分:1)

在撰写本文时,当前版本5.2没有正式的方法来执行此操作。

我就是这样做的:

  1. 获取索引字段: GET /.kibana/index-pattern/YOUR_INDEX
  2. 将您的脚本字段添加到 _source.fields (作为字符串,注意跳过的引号)

    "fields":"[...,{\"name\":\"test\",\"type\":\"number\",\"count\":0,\"scripted\":true,\"script\":\"doc['area_id'].value\",\"lang\":\"painless\",\"indexed\":false,\"analyzed\":false,\"doc_values\":false,\"searchable\":true,\"aggregatable\":true}]"
    
  3. 将_source json邮寄回/.kibana/index-pattern/YOUR_INDEX

    {
        "title":"YOUR_INDEX",
        "timeFieldName":"time",
        "fields":"[...,{\"name\":\"test\",...}]"
    }