如何为一条数据中的值数创建脚本字段?

时间:2019-05-15 18:31:42

标签: elasticsearch kibana elasticsearch-painless

我正在Elasticsearch中收集数据并在Kibana中进行可视化。我的数据包含每个条目可变数量的字段,并且我正在寻找生成一个直方图来跟踪每个条目的字段数量。例如,这是我的两条数据

{
   "extensions": {
      "@app/default-preset": "^2.2.0",
      "@app/redux": "^2.0.0",
      "@app/jest-plugin": "latest",
      "@app/next": "^2.0.0",
      "@app/cli": "latest",
      "@app/log": "^2.2.2",
      "@app/auth": "^2.0.0",
      "@app/intl": "^3.0.0"
    }
}
{
    "extensions": {
      "@app/default-preset": "^2.2.0",
      "@app/mocha-plugin": "latest",
      "@app/redux": "^2.0.0",
      "@app/cookies": "^2.0.0",
      "@app/next": "^2.0.0",
      "@app/intl-plugin": "^3.0.0",
      "@app/log": "^2.0.0",
      "@app/cli": "latest",
      "@app/auth": "^2.0.0",
      "@app/intl": "^3.1.1"
    }
}

因此,对于第一个,我想要值7,对于第二个,我想要值10。更好的办法是跟踪最常见的扩展,但这是一个单独的问题。我已经尝试为此创建脚本字段,但失败了。在Javascript中,该名称为Object.keys(extensions).length,但我不知道如何使用painless语言来做到这一点。

1 个答案:

答案 0 :(得分:0)

类似以下的方法应该起作用:

GET <your_index>/_search
{
  "query": {
    "match_all": {}
  },
  "script_fields": {
    "doc_field_count": {
      "script": "doc['extensions'].size()"
    }
  }
}

要计算流行的名称,建议您创建另一个脚本字段,您可以在其中使用 .keySet()方法获取扩展名作为Set。稍后,您可以使用聚合分析新创建的...