Elasticsearch Rollup Job日期字段Max聚合类型异常及映射调整咨询
解决Elasticsearch Rollup Job日期Max聚合映射为float的问题
我之前也碰到过一模一样的情况——Rollup默认会把日期字段的Max聚合转成时间戳数值,所以自动生成的映射就被设成了float,完全不符合我们需要date类型的预期。下面分两种场景给你具体的解决方案:
一、更新已生成的Rollup索引映射
注意:Elasticsearch不允许直接修改现有索引中字段的类型,所以得通过重建索引的方式来修正:
先停止当前运行的Rollup Job
在Kibana控制台执行:POST _rollup/job/<你的rollup-job名称>/_stop创建新索引并配置正确的映射
假设旧的rollup索引叫rollup_old_data,新索引命名为rollup_new_data,执行:PUT rollup_new_data { "mappings": { "properties": { # 保留其他字段原有映射,重点修改目标日期聚合字段 "target_date_field.max": { "type": "date", # 根据你的日期格式设置format,比如"yyyy-MM-dd HH:mm:ss"或默认的epoch_millis "format": "epoch_millis" }, # 其他字段的映射内容... } } }将旧索引数据迁移到新索引
用Reindex命令完成数据转移:POST _reindex { "source": { "index": "rollup_old_data" }, "dest": { "index": "rollup_new_data" } }更新Rollup Job并重启
修改Job的目标索引指向新创建的索引:PUT _rollup/job/<你的rollup-job名称>/_update { "index_pattern": "rollup_new_data" }最后启动Job:
POST _rollup/job/<你的rollup-job名称>/_start
二、创建Rollup Job时手动指定聚合字段类型
如果还没创建Job,或者可以重新创建,直接在Job配置里指定日期聚合的类型,从根源避免问题:
在Kibana控制台用Rollup API创建Job时,在metrics数组里为目标日期字段的Max聚合指定type为date,示例配置如下:
PUT _rollup/job/my_date_rollup_job { "index_pattern": "source-data-*", "rollup_index": "rollup_formatted_data", "cron": "0 */6 * * * ?", "page_size": 1000, "groups": { "date_histogram": { "field": "@timestamp", "fixed_interval": "1h" }, # 其他分组字段配置... }, "metrics": [ { "field": "target_date_field", "metrics": ["max"], # 手动指定聚合后字段的类型为date "type": "date" }, # 其他度量字段配置... ] }
这样创建的Rollup Job生成的索引中,target_date_field.max字段的映射就会是date类型,而不是默认的float。
另外提一句,7.6版本的Kibana UI创建Rollup Job时没有直接指定字段类型的选项,用API创建会更灵活可控。
内容的提问来源于stack exchange,提问作者simba
相关产品推荐
相关产品推荐

