0

我正在将 Tomcat 访问日志数据索引到 Elasticsearch (1.7.3) 中。我处理的文档有持续时间的概念,表示为结束时间和以毫秒为单位的持续时间(可以计算开始时间,但我也可以存储它,如果它有助于解决我的问题)。例如:

{
  ztime: "10-17-2015T04:05:00.000+02:00",
  duration: 4500,
  thred: "http-nio-8080-exec-14"
},
{
  ztime: "10-17-2015T04:07:42.227+02:00",
  duration: 3100,
  thred: "http-nio-8080-exec-25"
}

我的目标是生成一个直方图,在其中显示每秒存在多少线程。

我想过使用 date_histogram 将我的文档聚合到 1 秒的存储桶中。

GET /mindex/mtype/_search?search_type=count
{
  "aggs": {
      "threads_per_hr": {
        "date_histogram": {
          "field": "ztime",
          "interval": "1s",
          "min_doc_count": 1
        },
       "aggs": {
          "per_hr_threads": {
             "cardinality": {
                "field": "thread"
             }
          }
       }
      }
  }
}

但是,因此每个线程只会被分桶一次。

我需要将每个文档分成几个桶。例如,我需要将第一个文档分桶到 04:05:00.000、04:05:01.000、04:05:02.000、04:05:03.000 桶中。

什么样的查询(Java API 和/或 REST API)可以帮助我实现这个目标?

4

1 回答 1

0

您需要在此处使用基数聚合。它给出了该字段的唯一值的数量。

GET /{index}/{type}/_search?search_type=count
{
  "aggs": {
      "threads_per_hr": {
        "date_histogram": {
          "field": "ztime",
          "interval": "1s",
          "min_doc_count": 0
        },
       "aggs": {
          "per_hr_threads": {
             "cardinality": {
                "field": "thread"
             }
          }
       }
      }
  }
}
于 2015-11-12T18:58:33.823 回答