Elasticsearch 将字符串转换为数字

Elasticsearch converting a string to number

我是 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 for some guidance), but it's easier to just convert those fields to integers in Logstash using the mutate filter:

mutate {
    convert => ["name-of-field", "integer"]
}

然后 Elasticsearch 会更好地猜测您的字段的最佳数据类型。

(另见 Data type conversion using logstash grok。)

在最新的 Logstash 中语法如下

filter {
  mutate {
    convert => { "fieldname" => "integer" }
  }
}

您可以访问此 link 了解更多详情:https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-convert