diff --git a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/transforms/pivot/Aggregations.java b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/transforms/pivot/Aggregations.java index 79ad791986fae..f678c4a3847de 100644 --- a/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/transforms/pivot/Aggregations.java +++ b/x-pack/plugin/transform/src/main/java/org/elasticsearch/xpack/transform/transforms/pivot/Aggregations.java @@ -25,6 +25,13 @@ public final class Aggregations { // the field mapping should be determined explicitly from the source field mapping if possible. private static final String SOURCE = "_source"; + public static final String FLOAT = "float"; + public static final String SCALED_FLOAT = "scaled_float"; + public static final String DOUBLE = "double"; + public static final String LONG = "long"; + public static final String GEO_SHAPE = "geo_shape"; + public static final String GEO_POINT = "geo_point"; + private Aggregations() {} /** @@ -37,19 +44,19 @@ private Aggregations() {} * */ enum AggregationType { - AVG("avg", "double"), - CARDINALITY("cardinality", "long"), - VALUE_COUNT("value_count", "long"), + AVG("avg", DOUBLE), + CARDINALITY("cardinality", LONG), + VALUE_COUNT("value_count", LONG), MAX("max", SOURCE), MIN("min", SOURCE), - SUM("sum", "double"), - GEO_CENTROID("geo_centroid", "geo_point"), - GEO_BOUNDS("geo_bounds", "geo_shape"), + SUM("sum", DOUBLE), + GEO_CENTROID("geo_centroid", GEO_POINT), + GEO_BOUNDS("geo_bounds", GEO_SHAPE), SCRIPTED_METRIC("scripted_metric", DYNAMIC), WEIGHTED_AVG("weighted_avg", DYNAMIC), BUCKET_SELECTOR("bucket_selector", DYNAMIC), BUCKET_SCRIPT("bucket_script", DYNAMIC), - PERCENTILES("percentiles", "double"); + PERCENTILES("percentiles", DOUBLE); private final String aggregationType; private final String targetMapping; @@ -82,7 +89,16 @@ public static boolean isDynamicMapping(String targetMapping) { public static String resolveTargetMapping(String aggregationType, String sourceType) { AggregationType agg = AggregationType.valueOf(aggregationType.toUpperCase(Locale.ROOT)); - return agg.getTargetMapping().equals(SOURCE) ? sourceType : agg.getTargetMapping(); + + if (agg.getTargetMapping().equals(SOURCE)) { + // scaled float requires an additional parameter "scaling_factor", which we do not know, therefore we fallback to float + if (sourceType.equals(SCALED_FLOAT)) { + return FLOAT; + } + return sourceType; + } + + return agg.getTargetMapping(); } public static Map getAggregationOutputTypes(AggregationBuilder agg) { diff --git a/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationsTests.java b/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationsTests.java index d0cd0adae42ee..a4a0bb7c6cea5 100644 --- a/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationsTests.java +++ b/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/transforms/pivot/AggregationsTests.java @@ -27,11 +27,13 @@ public void testResolveTargetMapping() { assertEquals("int", Aggregations.resolveTargetMapping("max", "int")); assertEquals("double", Aggregations.resolveTargetMapping("max", "double")); assertEquals("half_float", Aggregations.resolveTargetMapping("max", "half_float")); + assertEquals("float", Aggregations.resolveTargetMapping("max", "scaled_float")); // min assertEquals("int", Aggregations.resolveTargetMapping("min", "int")); assertEquals("double", Aggregations.resolveTargetMapping("min", "double")); assertEquals("half_float", Aggregations.resolveTargetMapping("min", "half_float")); + assertEquals("float", Aggregations.resolveTargetMapping("min", "scaled_float")); // sum assertEquals("double", Aggregations.resolveTargetMapping("sum", "double"));