如何在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
相关产品推荐
相关产品推荐

