diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldMapper.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldMapper.java index e04aa5f6ad157..587086765c46a 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldMapper.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldMapper.java @@ -31,7 +31,6 @@ import org.elasticsearch.index.mapper.DocumentParserContext; import org.elasticsearch.index.mapper.FieldMapper; import org.elasticsearch.index.mapper.IgnoreMalformedStoredValues; -import org.elasticsearch.index.mapper.IndexType; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.MapperBuilderContext; @@ -253,11 +252,11 @@ public AggregateMetricDoubleFieldMapper build(MapperBuilderContext context) { AggregateMetricDoubleFieldType metricFieldType = new AggregateMetricDoubleFieldType( context.buildFullName(leafName()), - meta.getValue(), - timeSeriesMetric.getValue() + timeSeriesMetric.getValue(), + defaultMetric.getValue(), + metricFields, + meta.getValue() ); - metricFieldType.setMetricFields(metricFields); - metricFieldType.setDefaultMetric(defaultMetric.getValue()); return new AggregateMetricDoubleFieldMapper(leafName(), metricFieldType, metricMappers, builderParams(this, context), this); } @@ -270,19 +269,21 @@ public AggregateMetricDoubleFieldMapper build(MapperBuilderContext context) { public static final class AggregateMetricDoubleFieldType extends SimpleMappedFieldType { - private EnumMap metricFields; - - private Metric defaultMetric; - + private final EnumMap metricFields; + private final Metric defaultMetric; private final MetricType metricType; - public AggregateMetricDoubleFieldType(String name) { - this(name, Collections.emptyMap(), null); - } - - public AggregateMetricDoubleFieldType(String name, Map meta, MetricType metricType) { - super(name, IndexType.points(true, true), false, meta); + public AggregateMetricDoubleFieldType( + String name, + MetricType metricType, + Metric defaultMetric, + EnumMap metricFields, + Map meta + ) { + super(name, metricFields.get(defaultMetric).indexType(), false, meta); this.metricType = metricType; + this.defaultMetric = defaultMetric; + this.metricFields = metricFields; } /** @@ -311,29 +312,10 @@ public TextSearchInfo getTextSearchInfo() { return TextSearchInfo.SIMPLE_MATCH_WITHOUT_TERMS; } - private void setMetricFields(EnumMap metricFields) { - this.metricFields = metricFields; - } - public Map getMetricFields() { return Collections.unmodifiableMap(metricFields); } - public void addMetricField(Metric m, NumberFieldMapper.NumberFieldType subfield) { - if (metricFields == null) { - metricFields = new EnumMap<>(AggregateMetricDoubleFieldMapper.Metric.class); - } - - if (name() == null) { - throw new IllegalArgumentException("Field of type [" + typeName() + "] must have a name before adding a subfield"); - } - metricFields.put(m, subfield); - } - - public void setDefaultMetric(Metric defaultMetric) { - this.defaultMetric = defaultMetric; - } - Metric getDefaultMetric() { return defaultMetric; } diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedAvgAggregatorTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedAvgAggregatorTests.java index fade3f68376d0..530aea03c781e 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedAvgAggregatorTests.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedAvgAggregatorTests.java @@ -31,7 +31,9 @@ import org.elasticsearch.xpack.aggregatemetric.mapper.AggregateMetricDoubleFieldMapper.Metric; import java.io.IOException; +import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import static java.util.Collections.singleton; @@ -117,18 +119,16 @@ public void testQueryFiltering() throws IOException { * @return the created field type */ private AggregateMetricDoubleFieldType createDefaultFieldType(String fieldName) { - AggregateMetricDoubleFieldType fieldType = new AggregateMetricDoubleFieldType(fieldName); - + EnumMap metricFields = new EnumMap<>(Metric.class); for (Metric m : List.of(Metric.value_count, Metric.sum)) { String subfieldName = subfieldName(fieldName, m); NumberFieldMapper.NumberFieldType subfield = new NumberFieldMapper.NumberFieldType( subfieldName, NumberFieldMapper.NumberType.DOUBLE ); - fieldType.addMetricField(m, subfield); + metricFields.put(m, subfield); } - fieldType.setDefaultMetric(Metric.sum); - return fieldType; + return new AggregateMetricDoubleFieldType(fieldName, null, Metric.sum, metricFields, Map.of()); } private void testCase(Query query, CheckedConsumer buildIndex, Consumer verify) diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMaxAggregatorTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMaxAggregatorTests.java index 33e9151773fc2..1f04f89c8f5eb 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMaxAggregatorTests.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMaxAggregatorTests.java @@ -31,7 +31,9 @@ import org.elasticsearch.xpack.aggregatemetric.mapper.AggregateMetricDoubleFieldMapper.Metric; import java.io.IOException; +import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import static java.util.Collections.singleton; @@ -117,18 +119,16 @@ public void testQueryFiltering() throws IOException { * @return the created field type */ private AggregateMetricDoubleFieldType createDefaultFieldType(String fieldName) { - AggregateMetricDoubleFieldType fieldType = new AggregateMetricDoubleFieldType(fieldName); - + EnumMap metricFields = new EnumMap<>(Metric.class); for (Metric m : List.of(Metric.min, Metric.max)) { String subfieldName = subfieldName(fieldName, m); NumberFieldMapper.NumberFieldType subfield = new NumberFieldMapper.NumberFieldType( subfieldName, NumberFieldMapper.NumberType.DOUBLE ); - fieldType.addMetricField(m, subfield); + metricFields.put(m, subfield); } - fieldType.setDefaultMetric(Metric.min); - return fieldType; + return new AggregateMetricDoubleFieldType(fieldName, null, Metric.min, metricFields, Map.of()); } private void testCase(Query query, CheckedConsumer buildIndex, Consumer verify) diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMinAggregatorTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMinAggregatorTests.java index 0f655b90a2358..adf138cc8f4f1 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMinAggregatorTests.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedMinAggregatorTests.java @@ -31,7 +31,9 @@ import org.elasticsearch.xpack.aggregatemetric.mapper.AggregateMetricDoubleFieldMapper.Metric; import java.io.IOException; +import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import static java.util.Collections.singleton; @@ -117,18 +119,16 @@ public void testQueryFiltering() throws IOException { * @return the created field type */ private AggregateMetricDoubleFieldType createDefaultFieldType(String fieldName) { - AggregateMetricDoubleFieldType fieldType = new AggregateMetricDoubleFieldType(fieldName); - + EnumMap metricFields = new EnumMap<>(Metric.class); for (Metric m : List.of(Metric.min, Metric.max)) { String subfieldName = subfieldName(fieldName, m); NumberFieldMapper.NumberFieldType subfield = new NumberFieldMapper.NumberFieldType( subfieldName, NumberFieldMapper.NumberType.DOUBLE ); - fieldType.addMetricField(m, subfield); + metricFields.put(m, subfield); } - fieldType.setDefaultMetric(Metric.min); - return fieldType; + return new AggregateMetricDoubleFieldType(fieldName, null, Metric.min, metricFields, Map.of()); } private void testCase(Query query, CheckedConsumer buildIndex, Consumer verify) diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedSumAggregatorTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedSumAggregatorTests.java index e0e421189497c..7d015d3a8efa6 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedSumAggregatorTests.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedSumAggregatorTests.java @@ -31,7 +31,9 @@ import org.elasticsearch.xpack.aggregatemetric.mapper.AggregateMetricDoubleFieldMapper.Metric; import java.io.IOException; +import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import static java.util.Collections.singleton; @@ -117,18 +119,16 @@ public void testQueryFiltering() throws IOException { * @return the created field type */ private AggregateMetricDoubleFieldType createDefaultFieldType(String fieldName) { - AggregateMetricDoubleFieldType fieldType = new AggregateMetricDoubleFieldType(fieldName); - + EnumMap metricFields = new EnumMap<>(Metric.class); for (Metric m : List.of(Metric.value_count, Metric.sum)) { String subfieldName = subfieldName(fieldName, m); NumberFieldMapper.NumberFieldType subfield = new NumberFieldMapper.NumberFieldType( subfieldName, NumberFieldMapper.NumberType.DOUBLE ); - fieldType.addMetricField(m, subfield); + metricFields.put(m, subfield); } - fieldType.setDefaultMetric(Metric.sum); - return fieldType; + return new AggregateMetricDoubleFieldType(fieldName, null, Metric.sum, metricFields, Map.of()); } private void testCase(Query query, CheckedConsumer buildIndex, Consumer verify) diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedValueCountAggregatorTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedValueCountAggregatorTests.java index dbae604b8f725..227a69257d31f 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedValueCountAggregatorTests.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/aggregations/metrics/AggregateMetricBackedValueCountAggregatorTests.java @@ -31,7 +31,9 @@ import org.elasticsearch.xpack.aggregatemetric.mapper.AggregateMetricDoubleFieldMapper.Metric; import java.io.IOException; +import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.function.Consumer; import static java.util.Collections.singleton; @@ -116,18 +118,16 @@ public void testQueryFiltering() throws IOException { * @return the created field type */ private AggregateMetricDoubleFieldType createDefaultFieldType(String fieldName) { - AggregateMetricDoubleFieldType fieldType = new AggregateMetricDoubleFieldType(fieldName); - + EnumMap metricFields = new EnumMap<>(Metric.class); for (Metric m : List.of(Metric.value_count, Metric.sum)) { String subfieldName = subfieldName(fieldName, m); NumberFieldMapper.NumberFieldType subfield = new NumberFieldMapper.NumberFieldType( subfieldName, NumberFieldMapper.NumberType.DOUBLE ); - fieldType.addMetricField(m, subfield); + metricFields.put(m, subfield); } - fieldType.setDefaultMetric(Metric.sum); - return fieldType; + return new AggregateMetricDoubleFieldType(fieldName, null, Metric.sum, metricFields, Map.of()); } private void testCase(Query query, CheckedConsumer buildIndex, Consumer verify) diff --git a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldTypeTests.java b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldTypeTests.java index 55ecfc13b1f3e..87495ba84381e 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldTypeTests.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/test/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateMetricDoubleFieldTypeTests.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.util.Collections; +import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -46,20 +47,16 @@ public class AggregateMetricDoubleFieldTypeTests extends FieldTypeTestCase { protected AggregateMetricDoubleFieldType createDefaultFieldType(String name, Map meta, Metric defaultMetric) { - AggregateMetricDoubleFieldType fieldType = new AggregateMetricDoubleFieldType(name, meta, null); - for (AggregateMetricDoubleFieldMapper.Metric m : List.of( - AggregateMetricDoubleFieldMapper.Metric.min, - AggregateMetricDoubleFieldMapper.Metric.max - )) { - String subfieldName = subfieldName(fieldType.name(), m); + EnumMap metricFields = new EnumMap<>(Metric.class); + for (Metric m : List.of(Metric.min, Metric.max)) { + String subfieldName = subfieldName(name, m); NumberFieldMapper.NumberFieldType subfield = new NumberFieldMapper.NumberFieldType( subfieldName, NumberFieldMapper.NumberType.DOUBLE ); - fieldType.addMetricField(m, subfield); + metricFields.put(m, subfield); } - fieldType.setDefaultMetric(defaultMetric); - return fieldType; + return new AggregateMetricDoubleFieldType(name, null, defaultMetric, metricFields, meta); } public void testTermQuery() {