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

如何在Top Hit聚合中使用JSON输入?Max聚合可用但Top Hit报错

解决Top Hit聚合中使用JSON输入脚本的问题

我明白你遇到的困扰啦——在Max聚合里直接用{ "script": "doc['my_number_value'].value * 10" }能正常运行,但放到Top Hit聚合里就触发内部错误。这是因为Top Hit聚合的参数结构和Max聚合完全不同,它不支持在顶层直接定义script参数,得换一种写法:

正确的两种写法示例

1. 只返回脚本计算后的字段

如果你只需要得到经过乘10处理后的字段值,可以用script_fields来定义计算逻辑:

{
  "script_fields": {
    "my_number_value_scaled": {
      "script": {
        "source": "doc['my_number_value'].value * 10"
      }
    }
  },
  "_source": false // 关闭原始字段返回,只保留脚本计算的字段
}

2. 同时返回原始字段和脚本计算字段

如果需要保留原始的my_number_value字段,再加上计算后的字段,可以指定_source来保留原始字段,同时在script_fields里新增计算字段:

{
  "_source": ["my_number_value", "other_needed_field"], // 指定要保留的原始字段
  "script_fields": {
    "my_number_value_scaled": {
      "script": "doc['my_number_value'].value * 10"
    }
  }
}

为什么原来的写法会报错?

Max聚合属于数值类聚合,它的核心逻辑就是对字段值做计算,所以顶层支持script参数直接定义计算规则;而Top Hit聚合的作用是返回每个分组中匹配的顶部文档,它的参数聚焦于控制返回哪些字段(原始字段、脚本字段等),顶层并没有script这个合法参数,直接传入就会被Elasticsearch识别为无效配置,从而抛出内部错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:47