Kibana字符串类型timetaken字段数值过滤异常问题求助
解决Kibana字符串类型
timetaken字段数值过滤错误的问题 问题根源:字符串类型字段会按字典序而非数值大小比较,比如"2000"会被判定为大于"15000"(因为字典序中"2"开头的字符串排在"1"之后),导致过滤结果不符合预期。
方案1:修改字段映射为数值类型(推荐)
这是最彻底的解决方式,能支持后续所有数值相关的统计、分析操作:- 创建新索引模板,将
timetaken字段类型设置为integer或long(根据数据范围选择) - 将现有数据重新索引到新索引(已存在的字段映射无法直接修改,必须通过重新索引实现)
- 在Kibana中切换到新索引,之后即可正常使用
>15000进行数值过滤。
- 创建新索引模板,将
方案2:使用脚本字段临时处理
若暂时无法重新索引,可通过Kibana脚本字段实现正确过滤:- 进入Management > Index Patterns > 目标索引模式 > Scripted fields
- 添加新脚本字段,命名为
timetaken_num,脚本内容:
(若数值范围较大,替换为doc['timetaken'].value != null ? Integer.parseInt(doc['timetaken'].value) : nullLong.parseLong) - 保存后,在Discover或Visualize中使用
timetaken_num > 15000过滤即可得到正确结果。
方案3:查询时使用脚本过滤
直接在Kibana查询栏使用DSL脚本查询:{ "query": { "script": { "script": { "source": "Integer.parseInt(doc['timetaken'].value) > 15000", "lang": "painless" } } } }注意:该方式性能低于字段映射为数值类型,数据量大时不推荐使用。
内容的提问来源于stack exchange,提问作者Usama Waheed
相关产品推荐
相关产品推荐

