【问题标题】:How to create a Kibana (Elasticsearch) Scripted Field programatically?如何以编程方式创建 Kibana (Elasticsearch) 脚本字段?
【发布时间】:2017-02-03 01:01:23
【问题描述】:

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

Kibana UI for the Indice with the Scripted Fields tab highlighted

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

【问题讨论】:

  • 仅供参考,从docs看来,脚本字段似乎无法查询。

标签: elasticsearch kibana nest


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在撰写本文时,当前版本 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\",...}]"
      }
      

    【讨论】:

    • 这真是太糟糕了。它使我不使用此功能。假设我有一家水果公司,我想在图表中显示每月销售的苹果和橙子的数量。现在我想添加一个“总数”。我使用脚本字段实现了这一点,并且效果很好。但由于我无法使用索引导出/导入它,所以我现在选择修改我的加载脚本以仅在此处计算并将其添加到单独的字段中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多