我是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]
当我检查索引中的映射时,除时间戳之外的所有字段都标记为字符串 .
请告诉我如何克服这个问题,因为我在日志事件中有许多数字字段用于聚合 .
谢谢,
Keerthana
2 回答
您可以为这些字段设置显式映射(例如,参见Change default mapping of string to "not analyzed" in Elasticsearch以获得一些指导),但使用mutate filter将这些字段转换为Logstash中的整数更容易:
然后Elasticsearch会更好地猜测您的字段的最佳数据类型 .
(另见Data type conversion using logstash grok . )
在最新的Logstash中,语法如下
您可以访问此链接了解更多详情:https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-convert