我是 Elasticsearch 的新手,刚开始使用 ELK 堆栈。我在我的 Logstash 中收集键值类型日志并将其传递给 Elasticsearch 中的索引。我在 Logstash 中使用 kv 过滤器插件。因此,所有字段默认都是字符串类型。
当我尝试在 Elasticsearch 中的数字字段上执行 avg 或 sum 等聚合时,出现异常:ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch。 index.fielddata.IndexNumericFieldData]
当我检查索引中的映射时,除了时间戳之外的所有字段都被标记为字符串。
请告诉我如何解决这个问题,因为我的日志事件中有许多用于聚合的数字字段。
谢谢,
克尔萨纳
最佳答案
您可以为这些字段设置显式映射(参见例如 Change default mapping of string to "not analyzed" in Elasticsearch 以获得一些指导),但在 Logstash 中使用 mutate filter 将这些字段转换为整数更容易。 :
mutate {
convert => ["name-of-field", "integer"]
}
然后 Elasticsearch 会更好地猜测您的字段的最佳数据类型。
关于Elasticsearch 将字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29297722/