Elasticsearch 日期直方图聚合结果不匹配

Elasticsearch Date Histogram aggregations results mismatch

我已经从弹性搜索索引中获取了用户数。相同的查询,但不同的直方图间隔类型,如日、月、周、季度和年,计数未正确匹配

注意:我今年总共只有4个月的数据

这是针对月份间隔的 ES 搜索查询

{
     "query": {
            "range": {
              "@timestamp": {
                "gte": "2022-01-01",
                "lte": "2022-04-14"
              }
            }}, 
  "aggs": {
    "dt": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "month",
        "format": "yyyy-MM-dd"
         
      },          
  "aggs": {
    "events": {
      "nested": {
        "path": "events"
      },
 
  "aggs": {
    "unique_user_count": {
      "cardinality": {
        "field": "events.actor.id.keyword"
      }
    }
  }
}}}}}
  

低于月度结果(回复)

{
  "aggregations": {
    "dt": {
      "buckets": [
        {
          "key_as_string": "2022-01-01",
          "key": 1640995200000,
          "doc_count": 2930,
          "events": {
            "doc_count": 13988,
            "unique_user_count": {
              "value": 37
            }
          }
        },
        {
          "key_as_string": "2022-02-01",
          "key": 1643673600000,
          "doc_count": 36910,
          "events": {
            "doc_count": 175151,
            "unique_user_count": {
              "value": 580
            }
          }
        },
        {
          "key_as_string": "2022-03-01",
          "key": 1646092800000,
          "doc_count": 24861,
          "events": {
            "doc_count": 133383,
            "unique_user_count": {
              "value": 555
            }
          }
        },
        {
          "key_as_string": "2022-04-01",
          "key": 1648771200000,
          "doc_count": 6005,
          "events": {
            "doc_count": 30730,
            "unique_user_count": {
              "value": 170
            }
          }
        }
      ]
    }
  }
}

我再次 运行 相同的查询,但更改了时间间隔 = Year

{
         "query": {
                "range": {
                  "@timestamp": {
                    "gte": "2022-01-01",
                    "lte": "2022-04-14"
                  }
                }}, 
      "aggs": {
        "dt": {
          "date_histogram": {
            "field": "@timestamp",
            "interval": "year",
            "format": "yyyy-MM-dd"
             
          },          
      "aggs": {
        "events": {
          "nested": {
            "path": "events"
          },
     
      "aggs": {
        "unique_user_count": {
          "cardinality": {
            "field": "events.actor.id.keyword"
          }
        }
      }
    }}}}}

   

我收到以下年份回复

{
  "aggregations": {
    "dt": {
      "buckets": [
        {
          "key_as_string": "2022-01-01",
          "key": 1640995200000,
          "doc_count": 70706,
          "events": {
            "doc_count": 353252,
            "unique_user_count": {
              "value": 1007
            }
          }
        }
      ]
    }
  }
}

我的预期结果是这样的 年 = 37+580+555+170 year = 1342 ----> 但我得到“1007”错误值

如何匹配总和(月)值和年值?

在您的每月存储桶中,您是 运行 基数聚合以获得每月唯一用户数。

如果您 运行 一年内进行相同的聚合,则唯一用户数不能是每月用户数的总和,因为给定用户可能在几个月内进行过互动。

如果比较它们匹配的总事件数:13988 + 175151 + 133383 + 30730 = 353252

所以一切都很好,你只需要比较苹果和苹果