ES统计分组后的分组数量

工作中遇到需要统计分组数量的查询,记录一下

GET /fy_roomel/_search
{
  "size": 0, 
  "aggs": {
    "groupNAME": {
      "terms": {
        "field": "district.keyword"
      }
    },
    "count":{
      "cardinality": {
        "field": "district.keyword"
      }
    }
  }
}

ps: 按区域分组, 统计有几个区域

结果

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 145,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "groupNAME" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "包河区",
          "doc_count" : 87
        },
        {
          "key" : "瑶海区",
          "doc_count" : 29
        },
        {
          "key" : "津南区",
          "doc_count" : 26
        },
        {
          "key" : "蜀山区",
          "doc_count" : 3
        }
      ]
    },
    "count" : {
      "value" : 4
    }
  }
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将一组时间按24小时制进行分组统计,可以使用Elasticsearch的Terms Aggregation和Date Histogram Aggregation。首先将时间字段设置为date类型,然后使用Date Histogram Aggregation按小时分组,再在内部使用Terms Aggregation统计每个小时的数量。 以下是一个按24小时制进行分组统计的例子: 假设我们有一个索引,包含以下文档: ```json [ { "time": "2022-06-01T00:00:00Z" }, { "time": "2022-06-01T01:00:00Z" }, { "time": "2022-06-01T01:30:00Z" }, { "time": "2022-06-01T02:00:00Z" }, { "time": "2022-06-01T03:00:00Z" }, { "time": "2022-06-01T04:00:00Z" }, { "time": "2022-06-01T05:00:00Z" }, { "time": "2022-06-01T06:00:00Z" } ] ``` 我们可以使用以下查询来按24小时制进行分组统计: ```json { "aggs": { "hourly": { "date_histogram": { "field": "time", "interval": "hour", "format": "HH" }, "aggs": { "count": { "value_count": { "field": "time" } } } } } } ``` 该查询使用Date Histogram Aggregation按小时分组,并设置“format”参数为“HH”,表示按24小时制进行分组。然后在内部使用Terms Aggregation统计每个小时的数量。 查询结果如下: ```json { "aggregations" : { "hourly" : { "buckets" : [ { "key_as_string" : "00", "key" : 0, "doc_count" : 1, "count" : { "value" : 1 } }, { "key_as_string" : "01", "key" : 1, "doc_count" : 2, "count" : { "value" : 2 } }, { "key_as_string" : "02", "key" : 2, "doc_count" : 1, "count" : { "value" : 1 } }, { "key_as_string" : "03", "key" : 3, "doc_count" : 1, "count" : { "value" : 1 } }, { "key_as_string" : "04", "key" : 4, "doc_count" : 1, "count" : { "value" : 1 } }, { "key_as_string" : "05", "key" : 5, "doc_count" : 1, "count" : { "value" : 1 } }, { "key_as_string" : "06", "key" : 6, "doc_count" : 1, "count" : { "value" : 1 } } ] } } } ``` 可以看到,每个小时的数量都被正确地统计了。 ### 回答2: Elasticsearch是一个开源的分布式搜索与分析引擎,提供了强大的全文搜索、日志分析以及数据可视化功能。在Elasticsearch中,我们可以按照需求进行数据的分组统计,包括按照24小时制进行分组统计。 要按照24小时制进行分组统计,我们可以结合Elasticsearch的聚合(Aggregation)功能和日期范围查询(Range Query)来实现。下面是实现的步骤: 1. 创建一个索引,并确定需要统计的字段类型为日期类型。 2. 使用聚合功能进行分组统计,可以使用date_histogram聚合来按照特定的时间间隔进行分组。在这里,我们可以将时间间隔设置为1小时来实现按照24小时制进行分组。 3. 在聚合中使用range参数来指定时间范围,确保只统计在指定的时间范围内的数据。 4. 可以选择统计指定字段的计数、求和、平均值等等。 以下是一个示例的查询语句,用于按照24小时制进行分组统计: ``` GET /your_index/_search { "size": 0, "aggs": { "hourly_stats": { "date_histogram": { "field": "your_date_field", "interval": "1h", "format": "HH:mm" }, "aggs": { "your_statistic": { // 指定需要统计的字段和统计类型 "your_statistic_type": { "field": "your_field" } } } } }, "query": { "range": { "your_date_field": { "gte": "start_time", "lte": "end_time" } } } } ``` 在以上示例中,我们使用了date_histogram聚合按照1小时的时间间隔进行分组统计。同时,我们使用了range查询来限定需要统计的时间范围。在聚合内部,我们可以指定需要统计的字段和统计类型,如计数、求和等等。 通过以上的查询语句,我们可以获得按照24小时制进行分组统计的结果,并进行进一步的数据分析和可视化处理。 ### 回答3: Elasticsearch 是一个流行的分布式搜索和分析引擎,可以用于搜索、分析和存储大量数据。要按24小时制进行分组统计,在 Elasticsearch 中可以使用时间字段和聚合操作来实现。 首先,确保你的数据中有一个时间字段,例如一个包含时间戳的字段。可以通过在文档中添加一个字段,例如 "@timestamp" 来保存时间戳。 接下来,你可以使用 Elasticsearch 的日期直方图聚合(date histogram aggregation)来按24小时制分组统计。该聚合操作可以将数据按指定的时间间隔划分为不同的时间段,并计算每个时间段的统计值。 例如,假设你的索引名为 "my_index",时间字段为 "@timestamp",你可以使用以下查询来按24小时制进行分组统计: ``` GET my_index/_search { "size": 0, "aggs": { "hourly_stats": { "date_histogram": { "field": "@timestamp", "interval": "1h", "format": "HH:mm" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } } ``` 该查询将返回按小时分组统计数据,统计每个时间段内的平均价格。 需要注意的是,要正确地按24小时制进行分组统计,需要设置 "format" 参数为 "HH:mm" 这样的时间格式。根据你的需求,你可以调整 "interval" 参数来更细粒度地划分时间段,例如分钟、秒等。 总结起来,通过使用 Elasticsearch 的日期直方图聚合(date histogram aggregation),并设置合适的时间格式和间隔,就可以按照24小时制进行分组统计。使用类似的聚合操作,你还可以进行更多统计和分析,例如最大值、最小值、总和等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值