如何在弹性搜索聚合中按小时分组文档?

时间:2017-08-16 09:10:28

标签: elasticsearch aggregation

我尝试通过聚合按小时将文档分组一天,但总是得到异常“预期字段名称但得到了[START_OBJECT]”?有什么问题?

{
   "query" : {
    "bool" : {
      "must" : {
        "range" : {
          "timestamp" : {
            "from" : "2017-08-14 00:00:00",
            "to" : "2017-08-15 00:00:00",
            "include_lower" : true,
            "include_upper" : true
          }
        }
      }
    }
  },
  "aggs": {
    "result_by_hours": {
      "histogram": {
        "script": "doc.timestamp.date.getHourOfDay()",
        "interval": 1
      }
    }
  }
}

我期望在昨天返回每小时的文件数量。如何使用动态实时代替“2017-08-14 - 2017-08-15”?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

根据ES版本,您可以使用相对于"现在"的范围过滤器/查询,从现在开始 - 1d / d将在1天后返回。

请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

上的示例

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html

对于aggs,你也可以使用date_histogram和interval来按照例如一小时的间隔进行分组 在ES 5.5中: 查询:

"range" : {
          "timestamp" : {
            "gte" : "now-1d/d,
            "lte" : "now/d"
          }
        }

AGGS:

 {
        "aggs" : {
            "values_over_time" : {
                "date_histogram" : {
                    "field" : "timestamp",
                    "interval" : "1h"
                }
            }
        }
    }