elasticsearch 如何通过字段的子字符串或正则表达式生成Kibana图?,elasticsearch,kibana,kibana-4,elasticsearch,Kibana,Kibana 4" /> elasticsearch 如何通过字段的子字符串或正则表达式生成Kibana图?,elasticsearch,kibana,kibana-4,elasticsearch,Kibana,Kibana 4" />

elasticsearch 如何通过字段的子字符串或正则表达式生成Kibana图?

elasticsearch 如何通过字段的子字符串或正则表达式生成Kibana图?,elasticsearch,kibana,kibana-4,elasticsearch,Kibana,Kibana 4,我有一个使用Kibana的ElasticSearch实例,它保存了我几年来积累的大量用户级应用程序数据。其中一个字段是用户正在运行的Java版本 我想绘制Java版本随时间变化的图表,这样我就可以知道转换到新版本是否合理。不幸的是,我无法找到一种方法将1.6.0_31、1.6.0_32、1.6.0_37、1.6.0_51聚合为一个1.6条目,因此现在图形几乎无法读取 Kibana中有没有一种方法可以聚合数据,比如我可以为其编写正则表达式的“脚本字段”?例如,simplified_-java:os

我有一个使用Kibana的ElasticSearch实例,它保存了我几年来积累的大量用户级应用程序数据。其中一个字段是用户正在运行的Java版本

我想绘制Java版本随时间变化的图表,这样我就可以知道转换到新版本是否合理。不幸的是,我无法找到一种方法将
1.6.0_31
1.6.0_32
1.6.0_37
1.6.0_51
聚合为一个
1.6
条目,因此现在图形几乎无法读取

Kibana中有没有一种方法可以聚合数据,比如我可以为其编写正则表达式的“脚本字段”?例如,
simplified_-java:osjv%'\d\.\d'
simplified_-java
定义为
osjv
字段的一部分,该字段匹配一个数字后跟一个点再跟一个数字

目前,Kibana似乎只支持数字脚本字段,这使得它很难实现。我没有使用LogStash,因为我没有真正使用“日志”,而是在我的桌面应用程序中使用一个定制的事件报告框架,它(opt-in)报告使用情况统计数据,所以很遗憾,我不能使用它的任何功能

我可以手动操作,但我已经导入了2G的事件数据,我不想再做一次,只为应该可计算的内容添加一个新字段…:(


有没有办法基于Kibana中的子字符串或正则表达式创建字段,或者(如果没有)告诉ElasticSearch透明地执行相同操作的方法?

您完全可以在Kibana中对ElasticSearch中的字符串数据执行脚本字段,前提是它映射为
关键字
类型。有关一点信息和更好的示例,请参阅

简而言之,您可以通过构建返回子字符串的脚本字段来完成所需的工作:

def version = doc['osjv'].value; return (version != null) ? v.substring(0, v.lastIndexOf(".")-1) : version;
请记住,脚本化字段会影响性能,因为它们在每次查看时都会运行

更好的方法是在文档中使用
simplified\u java
值创建一个新字段。您不需要从源代码重新摄取所有数据,而是可以执行一个新的查询。您的查询就是
match\u all{}
然后,您可以定义一个脚本来创建新字段。因此,是的,有索引发生,但“就地”发生:

…尚未测试这些脚本中的任何一个,但看起来与它们类似

POST your-index/_update_by_query
{
  "script": {
    "source": "def version = ctx._source.osjv; ctx._source.simplified_java = (version != null) ? version.substring(0, version.lastIndexOf(".")-1) : version",
    "lang": "painless"
  },
  "query": {
    "match_all": {}
  }
}