1

我的索引中有 2010 年到 2015 年的数据。

从 2010 年到 2015 年,我使用以下代码获取每年汇总的名字详细信息,它按预期工作

POST profile/_search
{
  "size": "0",
  "aggs": {
    "count_by_year": {
      "date_histogram": {
        "field": "logdate",
        "interval": "year",
        "format": "yyyy"
      },
      "aggs": {
        "count_by_firstname": {
          "terms": {
            "field": "profile.firstname"
          }
        }
      }
    }
  }
}

如何根据每年的特定日期汇总我的数据。

例如,我想检索每年 2 月 15 日到 4 月 15 日的数据。

4

2 回答 2

4

您可以尝试将filter聚合与这样的script过滤器一起使用。请注意,2 月 15 日是一年中的第 46 天,4 月 15 日是一年中的第 105 天(当然闰年除外,但这说明了一个解决方案)。

将在 2 月 15 日至 4 月 15 日(任何年份)之间script获取任何文件,然后将它们发送到适当的年份桶中。最后,聚合按名字拆分计数。logdatedate_histogramterms

{
  "size": "0",
  "aggs": {
    "specific_period": {
      "filter": {
        "script": {
          "script": "doc.logdate.date.dayOfYear >= 46 && doc.logdate.date.dayOfYear <= 105"
        }
      },
      "aggs": {
        "byyear": {
          "date_histogram": {
            "field": "logdate",
            "interval": "year",
            "format": "yyyy"
          },
          "aggs": {
            "count_by_firstname": {
              "terms": {
                "field": "profile.firstname"
              }
            }
          }
        }
      }
    }
  }
}
于 2015-05-23T04:22:13.057 回答
2

日期范围聚合,范围如下:

{
    "aggs": {
        "range": {
            "date_range": {
                "field": "logdate",
                "format": "YYYYMMDD",
                "ranges": [
                    {
                        "from": "20150201"
                    },
                    {
                        "to": "20150430"
                    }
                ]
            },
            "aggs": {
                "count_by_firstname": {
                    "terms": {
                        "field": "profile.firstname"
                    }
                }
            }
        }
    }
}
于 2015-05-22T13:56:42.203 回答