【问题标题】:Elasticsearch converting a string to numberElasticsearch 将字符串转换为数字
【发布时间】:2015-03-27 09:51:35
【问题描述】:

我是 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]

当我检查索引中的映射时,除了时间戳之外的所有字段都标记为字符串。

请告诉我如何解决这个问题,因为我的日志事件中有许多数字字段用于聚合。

谢谢,

基尔塔纳

【问题讨论】:

    标签: elasticsearch logstash


    【解决方案1】:

    您可以为这些字段设置显式映射(例如,请参阅 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。)

    【讨论】:

      【解决方案2】:

      最新的Logstash语法如下

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

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

      【讨论】:

        猜你喜欢
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 2014-02-25
        • 2023-03-25
        相关资源
        最近更新 更多