You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kibana 基于脚本语言解析聚合动态表内工时总数值的方案咨询

工时字段解析聚合实现方案

你当前存储的Hours Worked字段为字符串类型,无法直接做数值聚合,需先完成字段类型适配,再执行聚合操作,以下是两种可行方案:


方案1:使用Runtime Field临时适配(无需修改原有索引,适合快速验证需求)

  • 进入Kibana的「Stack Management > 索引模式」,找到存储工时数据的对应索引模式
  • 点击「运行时字段」选项卡,选择「添加运行时字段」
  • 自定义字段名(如hours_worked_num),类型选择「整数」,在「定义脚本」处输入以下Painless脚本:
if (doc.containsKey('Hours Worked') && !doc['Hours Worked'].empty) {
  emit(Integer.parseInt(doc['Hours Worked'].value))
} else {
  emit(0)
}
  • 保存字段后即可用该数值型字段做各类聚合计算

方案2:修改索引Mapping永久生效(适合长期使用,聚合性能更优)

注意:reindex操作前请先备份原有索引数据,避免操作失误导致数据丢失

  • 先创建新索引,指定Hours Worked为整数类型,示例Mapping配置:
{
  "mappings": {
    "properties": {
      "dateweeklycomments": {"type": "date"},
      "Teammember": {"type": "keyword"},
      "Role": {
        "properties": {
          "name": {"type": "keyword"}
        }
      },
      "Hours Worked": {"type": "integer"}
    }
  }
}
  • 调用reindex接口完成旧数据迁移与类型转换,示例请求:
POST _reindex
{
  "source": {"index": "你的旧索引名称"},
  "dest": {"index": "你的新索引名称"},
  "script": {
    "source": "ctx._source['Hours Worked'] = Integer.parseInt(ctx._source['Hours Worked'])"
  }
}
  • 迁移完成后将原有索引模式关联到新索引,后续新增数据也会自动按数值类型存储

常见工时聚合操作示例

  • 按成员统计总工时:在Kibana Dashboard创建「数据表格」可视化,桶选择「Terms聚合」,字段选Teammember,指标选「Sum聚合」,字段选择数值类型的工时字段即可
  • 按周统计全团队总工时:桶选择「Date Histogram聚合」,字段选dateweeklycomments,时间间隔选「周」,指标选Sum工时字段
  • 按角色统计人均工时:先添加Terms聚合选Role.name,再添加Sum工时聚合和「Cardinality聚合」统计成员数,通过自定义公式总工时/成员数计算人均值

内容的提问来源于stack exchange,提问作者prohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 15:24:02