每小时总文件价值

时间:2018-07-21 18:10:05

标签: elasticsearch

我对汇总有疑问。我读到了Date Histogram Aggregation。但是它仅按日期对文档进行排序。因此,我有访问索引,其中有日期 visited_pa​​ge 字段。我想汇总例如每小时的计数(例如,用户每小时的访问页面数)。应该使用上面的聚合还是我应该以其他方式聚合?

2 个答案:

答案 0 :(得分:1)

该查询应该如下所示:

GET {index_name}/{type}/_search
{
  "size": 0, // no need to display search result, can boost query speed
  "aggs": {
    "unique_visited_page": {
      "terms": {
        "field": "visited_page" // this must be indexed with keyword type
      },
      "aggs": {
        "visit_page_per_hour" : {
          "date_histogram" : {
              "field" : "date_field",
              "interval" : "hour"
          }
        }
      }
    }
  }
}

我们先按 visited_pa​​ge 进行汇总,然后针对每个 visited_pa​​ge 每小时进行细化以获取计数。

使用我的示例数据的示例响应

{
  ...
  "hits": {
    "total": 4,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "unique_visited_page": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "contact.html",
          "doc_count": 2,
          "visit_page_per_hour": {
            "buckets": [
              {
                "key_as_string": "2018-07-24T14:00:00.000Z",
                "key": 1532440800000,
                "doc_count": 1
              },
              {
                "key_as_string": "2018-07-24T15:00:00.000Z",
                "key": 1532444400000,
                "doc_count": 1
              }
            ]
          }
        },
        {
          "key": "index.html",
          "doc_count": 1,
          "visit_page_per_hour": {
            "buckets": [
              {
                "key_as_string": "2018-07-24T13:00:00.000Z",
                "key": 1532437200000,
                "doc_count": 1
              }
            ]
          }
        },
        {
          "key": "page.html",
          "doc_count": 1,
          "visit_page_per_hour": {
            "buckets": [
              {
                "key_as_string": "2018-07-24T13:00:00.000Z",
                "key": 1532437200000,
                "doc_count": 1
              }
            ]
          }
        }
      ]
    }
  }
}

结果的关键是我们的 visited_pa​​ge 值,然后每小时进行汇总并返回 doc_count doc_count 也许是您想要的值。

希望有帮助。

答案 1 :(得分:0)

您似乎需要多存储桶聚合。 我发现this

您对此感兴趣:

 GET /_search
{
    "aggs" : {
        "my_buckets": {
            "composite" : {
                "sources" : [
                    { "date": { "date_histogram": { "field": "timestamp", "interval": "1d" } } },
                    { "product": { "terms": {"field": "product" } } }
                ]
            }
        }
    }
}
  

这将从两个值源(date_histogram和一个术语)创建的值中创建复合存储桶。每个存储区由两个值组成,其中一个用于聚合中定义的每个值源。允许任何类型的组合,并且数组中的顺序保留在复合存储桶中。

有帮助吗?