From 66700303187772ccceb9d7c1c4241cf39aba6945 Mon Sep 17 00:00:00 2001 From: WilliamBinquet Date: Fri, 3 Jul 2026 17:45:02 +0200 Subject: [PATCH] Pollux #12458 Added to translators TopMetrics and Significant Terms; Updated elasticsearch==8.17.1 in requirements.txt --- pybana/translators/elastic/buckets.py | 13 +++++++--- pybana/translators/elastic/metrics.py | 35 +++++++++++++++++++-------- requirements.txt | 4 +-- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/pybana/translators/elastic/buckets.py b/pybana/translators/elastic/buckets.py index 2fbd755..9d3f4b3 100644 --- a/pybana/translators/elastic/buckets.py +++ b/pybana/translators/elastic/buckets.py @@ -160,9 +160,7 @@ def translate(self, agg, state, context, field): } -class TermsBucket(BaseBucket): - aggtype = "terms" - +class BaseTermsBucket(BaseBucket): def translate(self, agg, state, context, field): orderby = agg["params"]["orderBy"] aggs = {agg["id"]: agg for agg in state["aggs"]} @@ -178,6 +176,14 @@ def translate(self, agg, state, context, field): } +class TermsBucket(BaseBucket): + aggtype = "terms" + + +class SignificantTermsBucket(BaseBucket): + aggtype = "significant_terms" + + TRANSLATORS = { translator.aggtype: translator for translator in ( @@ -187,6 +193,7 @@ def translate(self, agg, state, context, field): HistogramBucket, RangeBucket, TermsBucket, + SignificantTermsBucket, ) } diff --git a/pybana/translators/elastic/metrics.py b/pybana/translators/elastic/metrics.py index 205d74f..511ec2d 100644 --- a/pybana/translators/elastic/metrics.py +++ b/pybana/translators/elastic/metrics.py @@ -116,7 +116,19 @@ def translate(self, proxy, agg, state, field): pass -class TopHitsMetric(BaseMetric): +class BaseTopMetric(BaseMetric): + def translate(self, proxy, agg, state, field): + params = agg["params"] + proxy.metric( + agg["id"], + self.aggtype, + sort={params["sortField"]: {"order": params["sortOrder"]}}, + size=params["size"], + _source=agg["params"]["field"], + ) + + +class TopHitsMetric(BaseTopMetric): """ Translator for top_hits metric. @@ -127,15 +139,17 @@ class TopHitsMetric(BaseMetric): aggtype = "top_hits" - def translate(self, proxy, agg, state, field): - params = agg["params"] - proxy.metric( - agg["id"], - "top_hits", - sort={params["sortField"]: {"order": params["sortOrder"]}}, - size=params["size"], - _source=agg["params"]["field"], - ) + +class TopMetricsMetric(BaseTopMetric): + """ + Translator for top_metrics metric. + + Careful, this metric is partially supported: + - date fields are not handled. + - scripted fields are not handled. + """ + + aggtype = "top_metrics" TRANSLATORS = { @@ -153,6 +167,7 @@ def translate(self, proxy, agg, state, field): StdDevMetric, SumMetric, TopHitsMetric, + TopMetricsMetric, ) } diff --git a/requirements.txt b/requirements.txt index 76d9db0..9e430fe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -elasticsearch==6.4.0 -elasticsearch-dsl==6.4.0 +elasticsearch==8.17.1 +elasticsearch-dsl==8.17.1 hjson==3.0.1 pendulum==2.1.2 pytz>=2019.1