Skip to content

Commit

Permalink
fallback to float if source type is scaled_float for mapping deduction (
Browse files Browse the repository at this point in the history
#51990)

fallback to float if source type is scaled_float for mapping deduction of min/max aggregation

fixes #51780
  • Loading branch information
Hendrik Muhs committed Feb 6, 2020
1 parent 706d310 commit 73305e6
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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() {}

/**
Expand All @@ -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;
Expand Down Expand Up @@ -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<String, String> getAggregationOutputTypes(AggregationBuilder agg) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Expand Down

0 comments on commit 73305e6

Please sign in to comment.