首页 > 解决方案 > 在 Kibana date_histogram 聚合中使用数字字段作为日期

问题描述

我正在尝试使用 Kibana 中的 Visualize 功能来绘制每月 date_histogram 图表,该图表计算我系统中的消息数。消息类型有一个从纪元时间开始sent_at存储的字段。number虽然我可以用弹性搜索查询做到这一点

POST /_all/message/_search?size=0
{
    "aggs" : {
        "monthly_message" : {
            "date_histogram" : {
                "field" : "sent_at",
                "interval" : "month"
            }
        }
    }
}

我在 Kibana 中遇到了一个问题No Compatible Fields: The "myindex" index pattern does not contain any of the following field types: date

有没有办法让 Kibana 使用number字段作为日期?

标签: elasticsearchkibanaaggregation

解决方案


据我所知,Kibana 将使用索引映射来查找日期字段,如果找不到日期字段,那么 Kibana 将无法从其他数字字段中推断出一个。

您可以做的是添加另一个称为sent_at_date映射的字段,然后使用 update-by-query API 将该sent_at字段复制到该新字段,最后在 Kibana 中重新创建索引模式。

它基本上是这样的:

# 1. add a new field to your mapping
PUT myindex/_mapping/message
{
   "properties": {
      "sent_at_date": {
         "type": "date"
      }
   }
}

# 2. update all your documents
POST myindex/_update_by_query
{
   "script": {
      "source": "ctx._source.sent_at_date = ctx._source.sent_at"
   }
}

最后在 Kibana 中重新创建您的索引模式。您应该会看到一个名为sent_at_datetype的新字段date,您可以在 Kibana 中使用该字段。


推荐阅读