Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Transform] Fix mapping deduction for scaled_float #51990

Merged
merged 1 commit into from
Feb 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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