From 8232bb09be14b42c7d776a40ae4376c6dbe57138 Mon Sep 17 00:00:00 2001 From: Petr Vacha Date: Sun, 2 May 2021 23:43:18 +0200 Subject: [PATCH 1/2] Add year interval for DateHistogramFacet --- elasticsearch_dsl/faceted_search.py | 6 ++++++ tests/test_faceted_search.py | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/elasticsearch_dsl/faceted_search.py b/elasticsearch_dsl/faceted_search.py index e102ed5cb..ee324bbd0 100644 --- a/elasticsearch_dsl/faceted_search.py +++ b/elasticsearch_dsl/faceted_search.py @@ -168,6 +168,10 @@ def get_value_filter(self, filter_value): ) +def _date_interval_year(d): + return (d + timedelta(days=366)).replace(day=1) + + def _date_interval_month(d): return (d + timedelta(days=32)).replace(day=1) @@ -188,6 +192,8 @@ class DateHistogramFacet(Facet): agg_type = "date_histogram" DATE_INTERVALS = { + "year": _date_interval_year, + "1Y": _date_interval_year, "month": _date_interval_month, "1M": _date_interval_month, "week": _date_interval_week, diff --git a/tests/test_faceted_search.py b/tests/test_faceted_search.py index 66a096e44..6e4981319 100644 --- a/tests/test_faceted_search.py +++ b/tests/test_faceted_search.py @@ -151,6 +151,8 @@ def test_date_histogram_facet_with_1970_01_01_date(): @pytest.mark.parametrize( ["interval_type", "interval"], [ + ("interval", "year"), + ("calendar_interval", "year"), ("interval", "month"), ("calendar_interval", "month"), ("interval", "week"), @@ -160,6 +162,8 @@ def test_date_histogram_facet_with_1970_01_01_date(): ("fixed_interval", "day"), ("interval", "hour"), ("fixed_interval", "hour"), + ("interval", "1Y"), + ("calendar_interval", "1Y"), ("interval", "1M"), ("calendar_interval", "1M"), ("interval", "1w"), From 767d6d3b2c86ba08aae84c2dce25605199657139 Mon Sep 17 00:00:00 2001 From: nrsimha Date: Thu, 8 Jul 2021 12:17:21 +0200 Subject: [PATCH 2/2] Change day from 29 Feb to 28 for year interval. --- elasticsearch_dsl/faceted_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elasticsearch_dsl/faceted_search.py b/elasticsearch_dsl/faceted_search.py index ee324bbd0..03d99fdd0 100644 --- a/elasticsearch_dsl/faceted_search.py +++ b/elasticsearch_dsl/faceted_search.py @@ -169,7 +169,7 @@ def get_value_filter(self, filter_value): def _date_interval_year(d): - return (d + timedelta(days=366)).replace(day=1) + return d.replace(year=d.year+1, day=(28 if d.month == 2 and d.day == 29 else d.day)) def _date_interval_month(d):