如何将现有elasticsearch数据从字符串转换为数字

xoshrz7s  于 2021-06-09  发布在  ElasticSearch
关注(0)|答案(2)|浏览(1599)

我正在将aws cloudwatch日志(从node.js lambda应用程序)流式传输到aws elasticsearch集群,以便在kibana中查看度量。
我传输的一些数据是数字的,但是被记录为字符串。我已经更新了应用程序代码,将这些记录为数值,但是我不能在kibana中对这些字段使用数值可视化,因为字段类型现在是混合的——即在kibana设置中,它说 13 fields are defined as several types (string, integer, etc) across the indices that match this pattern... 有没有一种简单的方法来强制es/kibana将该字段始终视为数字?或者将所有以前记录的数据从字符串转换为数字?
我的搜索结果表明,我可以使用esapi进行某种类型的变异,但我无法追踪这个api调用的实际外观。免责声明:elasticsearch noob。

knsnq2tg

knsnq2tg1#

以下是我创建的脚本字段,感谢阿披实的回答:

String key = 'myfield';

if (doc.containsKey(key + '.keyword')) { 
    key += '.keyword';
    if (doc[key].size() != 0 && doc[key] != null) {
        if (doc[key].value instanceof String) {
            return Double.parseDouble(doc[key].value);
        }
    }
} else if (doc.containsKey(key) && doc[key].size() != 0 && doc[key] != null) {
    return doc[key].value;
}
6uxekuva

6uxekuva2#

这里有两种方法:
将字符串中的所有数据转换为数值。基本上,您必须重新索引整个数据(我们不能只需单击一下就更改字段类型),确保字符串转换为数值。重新索引的最佳方法是使用摄取节点管道
优点:建立在这些数据上的可视化效果会很快,因为数据已经是数字格式了。
缺点:如果数据集很大,转换可能需要很长时间。
将所有数据保持为字符串格式,并使用kibana中的脚本字段,以便在运行时(例如,在可视化时)将数据转换为数字格式
优点:不需要设置一个全新的管道来转换数据
缺点:对于您的基础设施来说,在大时间范围内进行可视化可能太慢/太重。

相关问题