Elasticsearch 将字符串转换为数字

标签 elasticsearch logstash

我是 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 会更好地猜测您的字段的最佳数据类型。

(另见 Data type conversion using logstash grok。)

关于Elasticsearch 将字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29297722/

相关文章:

elasticsearch - 如何从filebeat设置kibana索引模式?

elasticsearch - 测量logstash输出到弹性中所花费的时间

php - Elasticsearch排除结果

java高级休息客户端连接给出ssl错误

elasticsearch - Logstash:错误:尝试运行logstash.bat时找不到或加载主类堆栈

elasticsearch - 从Logstash更新到Elastic Search失败

elasticsearch - Logstash将不同的字段输出到不同的 Elasticsearch 索引

elasticsearch - 重新记录logstash记录?修复提取物?

elasticsearch - 使用 'docker-compose' 命令运行 Elasticsearch、Logstash 和 Kibana

elasticsearch 匹配搜索查询中文档中的所有单词