From 90fb919cf4101fafcf6adb6937f927b8cc703e1c Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Fri, 4 Dec 2020 12:05:28 -0300 Subject: [PATCH 1/7] =?UTF-8?q?A=20refactor=20based=20on=20characteristics?= =?UTF-8?q?=20of=20=E2=80=9Cgood=E2=80=9D=20programming=20practices=20of?= =?UTF-8?q?=20SOLID=20principles=20trying=20to=20reduce=20maintenance=20an?= =?UTF-8?q?d=20modification=20costs=20by=20improving=20understandability,?= =?UTF-8?q?=20reliability,=20reusability=20and=20robustness.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elasticsearch/ElasticsearchException.java | 258 +++++++++++++----- 1 file changed, 190 insertions(+), 68 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/ElasticsearchException.java b/server/src/main/java/org/elasticsearch/ElasticsearchException.java index b8a04cccdf13b..c24c3e9c5958e 100644 --- a/server/src/main/java/org/elasticsearch/ElasticsearchException.java +++ b/server/src/main/java/org/elasticsearch/ElasticsearchException.java @@ -419,81 +419,44 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo List suppressed = new ArrayList<>(); for (; token == XContentParser.Token.FIELD_NAME; token = parser.nextToken()) { - String currentFieldName = parser.currentName(); - token = parser.nextToken(); - - if (token.isValue()) { - if (TYPE.equals(currentFieldName)) { - type = parser.text(); - } else if (REASON.equals(currentFieldName)) { - reason = parser.text(); - } else if (STACK_TRACE.equals(currentFieldName)) { - stack = parser.text(); - } else if (token == XContentParser.Token.VALUE_STRING) { - metadata.put(currentFieldName, Collections.singletonList(parser.text())); + parser.nextToken(); + + if(isType(parser)){ + type = getTypeFromXContent(parser); + } else if (isReason(parser)){ + reason = getReasonFromXContent(parser); + } else if (isStack(parser)) { + stack = getStackFromXContent(parser); + } else if(hasMetadata(parser)){ + getMetadataFromXContent(parser,metadata,parseRootCauses); + } else if(hasCause(parser)){ + cause = getCauseFromXContent(parser); + } else if(isStartObjectToken(parser)){ + getHeadersFromXContent(parser, headers); + } else if(isStartArray(parser)){ + if(parseRootCauses && isRootCause(parser)){ + getRootCausesFromXContent(parser, rootCauses, parseRootCauses); + } else if(isSupressed(parser)){ + getSuppressedFromXContent(parser, suppressed); } - } else if (token == XContentParser.Token.START_OBJECT) { - if (CAUSED_BY.equals(currentFieldName)) { - cause = fromXContent(parser); - } else if (HEADER.equals(currentFieldName)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else { - List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); - if (token == XContentParser.Token.VALUE_STRING) { - values.add(parser.text()); - } else if (token == XContentParser.Token.START_ARRAY) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - if (token == XContentParser.Token.VALUE_STRING) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - } else if (token == XContentParser.Token.START_OBJECT) { - parser.skipChildren(); - } - headers.put(currentFieldName, values); - } - } - } else { - // Any additional metadata object added by the metadataToXContent method is ignored - // and skipped, so that the parser does not fail on unknown fields. The parser only - // support metadata key-pairs and metadata arrays of values. - parser.skipChildren(); - } - } else if (token == XContentParser.Token.START_ARRAY) { - if (parseRootCauses && ROOT_CAUSE.equals(currentFieldName)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - rootCauses.add(fromXContent(parser)); - } - } else if (SUPPRESSED.match(currentFieldName, parser.getDeprecationHandler())) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - suppressed.add(fromXContent(parser)); - } - } else { + else { // Parse the array and add each item to the corresponding list of metadata. // Arrays of objects are not supported yet and just ignored and skipped. - List values = new ArrayList<>(); - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - if (token == XContentParser.Token.VALUE_STRING) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - if (values.size() > 0) { - if (metadata.containsKey(currentFieldName)) { - values.addAll(metadata.get(currentFieldName)); - } - metadata.put(currentFieldName, values); - } + addMetadataFromArray(parser, metadata); } } } ElasticsearchException e = new ElasticsearchException(buildMessage(type, reason, stack), cause); + + addMetadata(e,metadata); + addHeader(e,headers); + addSuppressed(e, rootCauses, suppressed); + return e; + } + + private static void addMetadata(ElasticsearchException e, Map> metadata){ + for (Map.Entry> entry : metadata.entrySet()) { //subclasses can print out additional metadata through the metadataToXContent method. Simple key-value pairs will be //parsed back and become part of this metadata set, while objects and arrays are not supported when parsing back. @@ -503,10 +466,16 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo //TODO rename metadataToXContent and have only SearchPhaseExecutionException use it, which prints out complex objects e.addMetadata("es." + entry.getKey(), entry.getValue()); } + } + + private static void addHeader(ElasticsearchException e, Map> headers){ + for (Map.Entry> header : headers.entrySet()) { e.addHeader(header.getKey(), header.getValue()); } + } + private static void addSuppressed(ElasticsearchException e, List rootCauses, List suppressed){ // Adds root causes as suppressed exception. This way they are not lost // after parsing and can be retrieved using getSuppressed() method. for (ElasticsearchException rootCause : rootCauses) { @@ -515,7 +484,160 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo for (ElasticsearchException s : suppressed) { e.addSuppressed(s); } - return e; + } + + private static String getTypeFromXContent(XContentParser parser) throws IOException { + if (isType(parser)) { + return parser.text(); + } + return null; + } + + private static boolean isType(XContentParser parser) throws IOException { + return parser.currentToken().isValue() && TYPE.equals(parser.currentName()); + } + + private static String getReasonFromXContent(XContentParser parser) throws IOException { + if (isReason(parser)) { + return parser.text(); + } + return null; + } + + private static boolean isReason(XContentParser parser) throws IOException{ + return parser.currentToken().isValue() && REASON.equals(parser.currentName()); + } + + private static String getStackFromXContent(XContentParser parser) throws IOException { + if (isStack(parser)) { + return parser.text(); + } + return null; + } + + private static boolean isStack(XContentParser parser) throws IOException { + return parser.currentToken().isValue() && STACK_TRACE.equals(parser.currentName()); + } + + private static void getMetadataFromXContent(XContentParser parser, Map> metadata, boolean parseRootCauses) throws IOException { + if (isValueString(parser)) { + metadata.put(parser.currentName(), Collections.singletonList(parser.text())); + } else if (isStartArray(parser) && !(parseRootCauses && isRootCause(parser) || isSupressed(parser))) { + addMetadataFromArray(parser, metadata); + } + } + + private static boolean isValueString(XContentParser parser){ + return parser.currentToken().isValue() && parser.currentToken() == XContentParser.Token.VALUE_STRING; + } + + private static boolean isStartArray(XContentParser parser){ + return parser.currentToken() == XContentParser.Token.START_ARRAY; + } + + private static boolean isRootCause(XContentParser parser) throws IOException { + return ROOT_CAUSE.equals(parser.currentName()); + } + + private static boolean isSupressed(XContentParser parser) throws IOException { + return SUPPRESSED.match(parser.currentName(), parser.getDeprecationHandler()); + } + + private static boolean hasMetadata(XContentParser parser) throws IOException { + return isValueString(parser) || (isStartArray(parser) && !(isRootCause(parser) || isSupressed(parser))); + } + + /** + * Parse the array and add each item to the corresponding list of metadata. + * Arrays of objects are not supported yet and just ignored and skipped. + */ + private static void addMetadataFromArray(XContentParser parser, Map> metadata) throws IOException { + List values = new ArrayList<>(); + + while (parser.nextToken() != XContentParser.Token.END_ARRAY) { + if (isValueString(parser)) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + if (values.size() > 0) { + if (metadata.containsKey(parser.currentName())) { + values.addAll(metadata.get(parser.currentName())); + } + metadata.put(parser.currentName(), values); + } + } + + private static ElasticsearchException getCauseFromXContent(XContentParser parser) throws IOException { + if (hasCause(parser)) { + return fromXContent(parser); + } + return null; + } + + private static boolean hasCause(XContentParser parser) throws IOException { + return parser.currentToken() == XContentParser.Token.START_OBJECT && CAUSED_BY.equals(parser.currentName()); + } + + private static void getHeadersFromXContent(XContentParser parser, Map> headers) throws IOException { + XContentParser.Token token = parser.currentToken(); + String currentFieldName = parser.currentName(); + + if (isStartObjectToken(parser)) { + if (hasHeader(parser)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { + if (token == XContentParser.Token.FIELD_NAME) { + currentFieldName = parser.currentName(); + } else { + List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); + if (isValueString(parser)) { + values.add(parser.text()); + } else if (isStartArray(parser)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + if (isValueString(parser)) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + } else if (isStartObjectToken(parser)) { + parser.skipChildren(); + } + headers.put(currentFieldName, values); + } + } + } else { + // Any additional metadata object added by the metadataToXContent method is ignored + // and skipped, so that the parser does not fail on unknown fields. The parser only + // support metadata key-pairs and metadata arrays of values. + parser.skipChildren(); + } + } + } + + private static boolean isStartObjectToken(XContentParser parser){ + return parser.currentToken() == XContentParser.Token.START_OBJECT; + } + + private static boolean hasHeader(XContentParser parser) throws IOException { + return HEADER.equals(parser.currentName()); + } + + private static void getRootCausesFromXContent(XContentParser parser, List rootCauses, boolean parseRootCauses) throws IOException { + if (isStartArray(parser) && parseRootCauses && isRootCause(parser)) { + while (parser.nextToken() != XContentParser.Token.END_ARRAY) { + rootCauses.add(fromXContent(parser)); + } + } + } + + private static void getSuppressedFromXContent(XContentParser parser, List suppressed) throws IOException { + if (isSupressed(parser)) { + while (parser.nextToken() != XContentParser.Token.END_ARRAY) { + suppressed.add(fromXContent(parser)); + } + } } /** From 7f199b795278f3d6692a0e47d36082e91d46373c Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Sat, 5 Dec 2020 17:58:02 -0300 Subject: [PATCH 2/7] =?UTF-8?q?Revert=20"A=20refactor=20based=20on=20chara?= =?UTF-8?q?cteristics=20of=20=E2=80=9Cgood=E2=80=9D=20programming=20practi?= =?UTF-8?q?ces=20of=20SOLID=20principles=20trying=20to=20reduce=20maintena?= =?UTF-8?q?nce=20and=20modification=20costs=20by=20improving=20understanda?= =?UTF-8?q?bility,=20reliability,=20reusability=20and=20robustness."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 90fb919c --- .../elasticsearch/ElasticsearchException.java | 258 +++++------------- 1 file changed, 68 insertions(+), 190 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/ElasticsearchException.java b/server/src/main/java/org/elasticsearch/ElasticsearchException.java index c24c3e9c5958e..b8a04cccdf13b 100644 --- a/server/src/main/java/org/elasticsearch/ElasticsearchException.java +++ b/server/src/main/java/org/elasticsearch/ElasticsearchException.java @@ -419,44 +419,81 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo List suppressed = new ArrayList<>(); for (; token == XContentParser.Token.FIELD_NAME; token = parser.nextToken()) { - parser.nextToken(); - - if(isType(parser)){ - type = getTypeFromXContent(parser); - } else if (isReason(parser)){ - reason = getReasonFromXContent(parser); - } else if (isStack(parser)) { - stack = getStackFromXContent(parser); - } else if(hasMetadata(parser)){ - getMetadataFromXContent(parser,metadata,parseRootCauses); - } else if(hasCause(parser)){ - cause = getCauseFromXContent(parser); - } else if(isStartObjectToken(parser)){ - getHeadersFromXContent(parser, headers); - } else if(isStartArray(parser)){ - if(parseRootCauses && isRootCause(parser)){ - getRootCausesFromXContent(parser, rootCauses, parseRootCauses); - } else if(isSupressed(parser)){ - getSuppressedFromXContent(parser, suppressed); + String currentFieldName = parser.currentName(); + token = parser.nextToken(); + + if (token.isValue()) { + if (TYPE.equals(currentFieldName)) { + type = parser.text(); + } else if (REASON.equals(currentFieldName)) { + reason = parser.text(); + } else if (STACK_TRACE.equals(currentFieldName)) { + stack = parser.text(); + } else if (token == XContentParser.Token.VALUE_STRING) { + metadata.put(currentFieldName, Collections.singletonList(parser.text())); } - else { + } else if (token == XContentParser.Token.START_OBJECT) { + if (CAUSED_BY.equals(currentFieldName)) { + cause = fromXContent(parser); + } else if (HEADER.equals(currentFieldName)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { + if (token == XContentParser.Token.FIELD_NAME) { + currentFieldName = parser.currentName(); + } else { + List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); + if (token == XContentParser.Token.VALUE_STRING) { + values.add(parser.text()); + } else if (token == XContentParser.Token.START_ARRAY) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + if (token == XContentParser.Token.VALUE_STRING) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + } else if (token == XContentParser.Token.START_OBJECT) { + parser.skipChildren(); + } + headers.put(currentFieldName, values); + } + } + } else { + // Any additional metadata object added by the metadataToXContent method is ignored + // and skipped, so that the parser does not fail on unknown fields. The parser only + // support metadata key-pairs and metadata arrays of values. + parser.skipChildren(); + } + } else if (token == XContentParser.Token.START_ARRAY) { + if (parseRootCauses && ROOT_CAUSE.equals(currentFieldName)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + rootCauses.add(fromXContent(parser)); + } + } else if (SUPPRESSED.match(currentFieldName, parser.getDeprecationHandler())) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + suppressed.add(fromXContent(parser)); + } + } else { // Parse the array and add each item to the corresponding list of metadata. // Arrays of objects are not supported yet and just ignored and skipped. - addMetadataFromArray(parser, metadata); + List values = new ArrayList<>(); + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + if (token == XContentParser.Token.VALUE_STRING) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + if (values.size() > 0) { + if (metadata.containsKey(currentFieldName)) { + values.addAll(metadata.get(currentFieldName)); + } + metadata.put(currentFieldName, values); + } } } } ElasticsearchException e = new ElasticsearchException(buildMessage(type, reason, stack), cause); - - addMetadata(e,metadata); - addHeader(e,headers); - addSuppressed(e, rootCauses, suppressed); - return e; - } - - private static void addMetadata(ElasticsearchException e, Map> metadata){ - for (Map.Entry> entry : metadata.entrySet()) { //subclasses can print out additional metadata through the metadataToXContent method. Simple key-value pairs will be //parsed back and become part of this metadata set, while objects and arrays are not supported when parsing back. @@ -466,16 +503,10 @@ private static void addMetadata(ElasticsearchException e, Map> headers){ - for (Map.Entry> header : headers.entrySet()) { e.addHeader(header.getKey(), header.getValue()); } - } - private static void addSuppressed(ElasticsearchException e, List rootCauses, List suppressed){ // Adds root causes as suppressed exception. This way they are not lost // after parsing and can be retrieved using getSuppressed() method. for (ElasticsearchException rootCause : rootCauses) { @@ -484,160 +515,7 @@ private static void addSuppressed(ElasticsearchException e, List> metadata, boolean parseRootCauses) throws IOException { - if (isValueString(parser)) { - metadata.put(parser.currentName(), Collections.singletonList(parser.text())); - } else if (isStartArray(parser) && !(parseRootCauses && isRootCause(parser) || isSupressed(parser))) { - addMetadataFromArray(parser, metadata); - } - } - - private static boolean isValueString(XContentParser parser){ - return parser.currentToken().isValue() && parser.currentToken() == XContentParser.Token.VALUE_STRING; - } - - private static boolean isStartArray(XContentParser parser){ - return parser.currentToken() == XContentParser.Token.START_ARRAY; - } - - private static boolean isRootCause(XContentParser parser) throws IOException { - return ROOT_CAUSE.equals(parser.currentName()); - } - - private static boolean isSupressed(XContentParser parser) throws IOException { - return SUPPRESSED.match(parser.currentName(), parser.getDeprecationHandler()); - } - - private static boolean hasMetadata(XContentParser parser) throws IOException { - return isValueString(parser) || (isStartArray(parser) && !(isRootCause(parser) || isSupressed(parser))); - } - - /** - * Parse the array and add each item to the corresponding list of metadata. - * Arrays of objects are not supported yet and just ignored and skipped. - */ - private static void addMetadataFromArray(XContentParser parser, Map> metadata) throws IOException { - List values = new ArrayList<>(); - - while (parser.nextToken() != XContentParser.Token.END_ARRAY) { - if (isValueString(parser)) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - if (values.size() > 0) { - if (metadata.containsKey(parser.currentName())) { - values.addAll(metadata.get(parser.currentName())); - } - metadata.put(parser.currentName(), values); - } - } - - private static ElasticsearchException getCauseFromXContent(XContentParser parser) throws IOException { - if (hasCause(parser)) { - return fromXContent(parser); - } - return null; - } - - private static boolean hasCause(XContentParser parser) throws IOException { - return parser.currentToken() == XContentParser.Token.START_OBJECT && CAUSED_BY.equals(parser.currentName()); - } - - private static void getHeadersFromXContent(XContentParser parser, Map> headers) throws IOException { - XContentParser.Token token = parser.currentToken(); - String currentFieldName = parser.currentName(); - - if (isStartObjectToken(parser)) { - if (hasHeader(parser)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else { - List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); - if (isValueString(parser)) { - values.add(parser.text()); - } else if (isStartArray(parser)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - if (isValueString(parser)) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - } else if (isStartObjectToken(parser)) { - parser.skipChildren(); - } - headers.put(currentFieldName, values); - } - } - } else { - // Any additional metadata object added by the metadataToXContent method is ignored - // and skipped, so that the parser does not fail on unknown fields. The parser only - // support metadata key-pairs and metadata arrays of values. - parser.skipChildren(); - } - } - } - - private static boolean isStartObjectToken(XContentParser parser){ - return parser.currentToken() == XContentParser.Token.START_OBJECT; - } - - private static boolean hasHeader(XContentParser parser) throws IOException { - return HEADER.equals(parser.currentName()); - } - - private static void getRootCausesFromXContent(XContentParser parser, List rootCauses, boolean parseRootCauses) throws IOException { - if (isStartArray(parser) && parseRootCauses && isRootCause(parser)) { - while (parser.nextToken() != XContentParser.Token.END_ARRAY) { - rootCauses.add(fromXContent(parser)); - } - } - } - - private static void getSuppressedFromXContent(XContentParser parser, List suppressed) throws IOException { - if (isSupressed(parser)) { - while (parser.nextToken() != XContentParser.Token.END_ARRAY) { - suppressed.add(fromXContent(parser)); - } - } + return e; } /** From 46014efac28ba8ae8bdfe69f035a568e61d96c76 Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Sun, 6 Dec 2020 02:57:33 -0300 Subject: [PATCH 3/7] Parse user type hints directly to ValuesSourceTypes --- .../client/RequestConvertersTests.java | 3 +- .../org/elasticsearch/client/SearchIT.java | 19 ++--- .../ArrayValuesSourceAggregationBuilder.java | 15 ++-- .../org/elasticsearch/search/CCSDuelIT.java | 19 ++--- .../action/search/TransportSearchIT.java | 3 +- .../bucket/terms/StringTermsIT.java | 3 +- .../CompositeValuesSourceBuilder.java | 20 ++--- .../CompositeValuesSourceParserHelper.java | 4 +- .../WeightedAvgAggregationBuilder.java | 3 +- .../support/CoreValuesSourceType.java | 14 ++-- .../MultiValuesSourceAggregationBuilder.java | 19 +++-- .../support/MultiValuesSourceParseHelper.java | 6 +- .../aggregations/support/ValueType.java | 6 +- .../aggregations/support/ValuesSource.java | 6 +- .../ValuesSourceAggregationBuilder.java | 17 ++-- .../support/ValuesSourceConfig.java | 42 +++++----- .../support/ValuesSourceType.java | 2 +- .../search/SearchServiceTests.java | 9 ++- .../aggregations/bucket/FiltersTests.java | 3 +- .../composite/CompositeAggregatorTests.java | 5 +- .../bucket/nested/NestedAggregatorTests.java | 13 ++-- .../terms/BinaryTermsAggregatorTests.java | 10 ++- .../terms/KeywordTermsAggregatorTests.java | 8 +- .../terms/NumericTermsAggregatorTests.java | 10 ++- .../bucket/terms/TermsAggregatorTests.java | 77 ++++++++++--------- .../metrics/AvgAggregatorTests.java | 3 +- .../metrics/MaxAggregatorTests.java | 4 +- .../metrics/ValueCountAggregatorTests.java | 2 +- .../WeightedAvgAggregationBuilderTests.java | 2 + .../aggregations/pipeline/AvgBucketTests.java | 3 +- .../pipeline/BucketScriptAggregatorTests.java | 3 +- .../pipeline/ExtendedStatsBucketTests.java | 3 +- .../aggregations/pipeline/MaxBucketTests.java | 3 +- .../aggregations/pipeline/MinBucketTests.java | 3 +- .../pipeline/PercentilesBucketTests.java | 3 +- .../pipeline/StatsBucketTests.java | 3 +- .../aggregations/pipeline/SumBucketTests.java | 3 +- .../support/ValuesSourceConfigTests.java | 14 ++-- .../support/AnalyticsValuesSourceType.java | 3 +- .../ttest/TTestAggregationBuilder.java | 2 +- .../StringStatsAggregatorTests.java | 4 +- .../AggregateMetricsValuesSourceType.java | 3 +- .../rollup/RollupJobIdentifierUtilTests.java | 3 +- .../rollup/RollupRequestTranslationTests.java | 3 +- .../RollupResponseTranslationTests.java | 17 ++-- .../GeoLineAggregationBuilder.java | 2 +- .../support/GeoShapeValuesSourceType.java | 2 +- .../xpack/sql/querydsl/agg/GroupByKey.java | 17 ++-- 48 files changed, 232 insertions(+), 209 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index c0b6b93c4544f..b1f723b43543b 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -92,6 +92,7 @@ import org.elasticsearch.script.mustache.SearchTemplateRequest; import org.elasticsearch.search.Scroll; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; @@ -1079,7 +1080,7 @@ public static SearchSourceBuilder createTestSearchSourceBuilder() { } if (randomBoolean()) { searchSourceBuilder.aggregation(new TermsAggregationBuilder(randomAlphaOfLengthBetween(3, 10)) - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field(randomAlphaOfLengthBetween(3, 10))); } if (randomBoolean()) { diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java index 70ccf7984863c..76799ee11ea35 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java @@ -75,6 +75,7 @@ import org.elasticsearch.search.aggregations.matrix.stats.MatrixStatsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.WeightedAvg; import org.elasticsearch.search.aggregations.metrics.WeightedAvgAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; @@ -260,7 +261,7 @@ public void testSearchMatchQuery() throws IOException { public void testSearchWithTermsAgg() throws IOException { SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING) + searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES) .field("type.keyword")); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); @@ -284,7 +285,7 @@ public void testSearchWithTermsAgg() throws IOException { public void testSearchWithRareTermsAgg() throws IOException { SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - searchSourceBuilder.aggregation(new RareTermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING) + searchSourceBuilder.aggregation(new RareTermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES) .field("type.keyword").maxDocCount(2)); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); @@ -373,7 +374,7 @@ public void testSearchWithRangeAgg() throws IOException { public void testSearchWithTermsAndRangeAgg() throws IOException { SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING).field("type.keyword"); + TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES).field("type.keyword"); agg.subAggregation(new RangeAggregationBuilder("subagg").field("num") .addRange("first", 0, 30).addRange("second", 31, 200)); searchSourceBuilder.aggregation(agg); @@ -427,7 +428,7 @@ public void testSearchWithTermsAndRangeAgg() throws IOException { public void testSearchWithTermsAndWeightedAvg() throws IOException { SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING).field("type.keyword"); + TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES).field("type.keyword"); agg.subAggregation(new WeightedAvgAggregationBuilder("subagg") .value(new MultiValuesSourceFieldConfig.Builder().setFieldName("num").build()) .weight(new MultiValuesSourceFieldConfig.Builder().setFieldName("num2").build()) @@ -554,10 +555,10 @@ public void testSearchWithParentJoin() throws IOException { client().performRequest(new Request(HttpPost.METHOD_NAME, "/_refresh")); TermsAggregationBuilder leafTermAgg = new TermsAggregationBuilder("top-names") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field("owner.display_name.keyword").size(10); ChildrenAggregationBuilder childrenAgg = new ChildrenAggregationBuilder("to-answers", "answer").subAggregation(leafTermAgg); - TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(CoreValuesSourceType.BYTES) .field("tags.keyword") .size(10).subAggregation(childrenAgg); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); @@ -770,17 +771,17 @@ public void testMultiSearch() throws Exception { public void testMultiSearch_withAgg() throws Exception { MultiSearchRequest multiSearchRequest = new MultiSearchRequest(); SearchRequest searchRequest1 = new SearchRequest("index1"); - searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING) + searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest1); SearchRequest searchRequest2 = new SearchRequest("index2"); - searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING) + searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest2); SearchRequest searchRequest3 = new SearchRequest("index3"); - searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING) + searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest3); diff --git a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java index 7d965291c24aa..c20956d4a4851 100644 --- a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java +++ b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java @@ -29,12 +29,7 @@ import org.elasticsearch.search.aggregations.AggregatorFactory; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; public abstract class ArrayValuesSourceAggregationBuilder> extends AbstractAggregationBuilder { @@ -79,7 +74,7 @@ public final BucketCardinality bucketCardinality() { /* The parser doesn't support setting userValueTypeHint (aka valueType), but we do serialize and deserialize it, so keeping it around for now so as to not break BWC. Future refactors should feel free to remove this field. --Tozzi 2020-01-16 */ - private ValueType userValueTypeHint = null; + private ValuesSourceType userValueTypeHint = null; private String format = null; private Object missing = null; private Map missingMap = Collections.emptyMap(); @@ -110,7 +105,7 @@ protected ArrayValuesSourceAggregationBuilder(StreamInput in) @SuppressWarnings("unchecked") private void read(StreamInput in) throws IOException { fields = (ArrayList)in.readGenericValue(); - userValueTypeHint = in.readOptionalWriteable(ValueType::readFromStream); + userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); format = in.readOptionalString(); missingMap = in.readMap(); } @@ -118,7 +113,7 @@ private void read(StreamInput in) throws IOException { @Override protected final void doWriteTo(StreamOutput out) throws IOException { out.writeGenericValue(fields); - out.writeOptionalWriteable(userValueTypeHint); + out.writeString(userValueTypeHint.typeName().toUpperCase(Locale.ROOT)); out.writeOptionalString(format); out.writeMap(missingMap); innerWriteTo(out); @@ -225,7 +220,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field(CommonFields.FORMAT.getPreferredName(), format); } if (userValueTypeHint != null) { - builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.getPreferredName()); + builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java b/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java index 55a762ada4815..3e99e25fb63ce 100644 --- a/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java +++ b/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java @@ -69,6 +69,7 @@ import org.elasticsearch.search.aggregations.metrics.TopHitsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.DerivativePipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.MaxBucketPipelineAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; @@ -529,32 +530,32 @@ public void testTermsAggsWithProfile() throws Exception { private static SearchSourceBuilder buildTermsAggsSource() { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); - TermsAggregationBuilder cluster = new TermsAggregationBuilder("cluster123").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder cluster = new TermsAggregationBuilder("cluster123").userValueTypeHint(CoreValuesSourceType.BYTES); cluster.field("_index"); - TermsAggregationBuilder type = new TermsAggregationBuilder("type").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder type = new TermsAggregationBuilder("type").userValueTypeHint(CoreValuesSourceType.BYTES); type.field("type.keyword"); type.showTermDocCountError(true); type.order(BucketOrder.key(true)); cluster.subAggregation(type); sourceBuilder.aggregation(cluster); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); tags.showTermDocCountError(true); tags.size(100); sourceBuilder.aggregation(tags); - TermsAggregationBuilder tags2 = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags2 = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags2.field("tags.keyword"); tags.subAggregation(tags2); FilterAggregationBuilder answers = new FilterAggregationBuilder("answers", new TermQueryBuilder("type", "answer")); TermsAggregationBuilder answerPerQuestion = new TermsAggregationBuilder("answer_per_question") - .userValueTypeHint(ValueType.STRING); + .userValueTypeHint(CoreValuesSourceType.BYTES); answerPerQuestion.showTermDocCountError(true); answerPerQuestion.field("questionId.keyword"); answers.subAggregation(answerPerQuestion); - TermsAggregationBuilder answerPerUser = new TermsAggregationBuilder("answer_per_user").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder answerPerUser = new TermsAggregationBuilder("answer_per_user").userValueTypeHint(CoreValuesSourceType.BYTES); answerPerUser.field("user.keyword"); answerPerUser.size(30); answerPerUser.showTermDocCountError(true); @@ -569,7 +570,7 @@ public void testDateHistogram() throws Exception { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); searchRequest.source(sourceBuilder); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); tags.showTermDocCountError(true); DateHistogramAggregationBuilder creation = new DateHistogramAggregationBuilder("creation"); @@ -586,7 +587,7 @@ public void testCardinalityAgg() throws Exception { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); searchRequest.source(sourceBuilder); - CardinalityAggregationBuilder tags = new CardinalityAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + CardinalityAggregationBuilder tags = new CardinalityAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); sourceBuilder.aggregation(tags); duelSearch(searchRequest, CCSDuelIT::assertAggs); @@ -625,7 +626,7 @@ public void testTopHits() throws Exception { topHits.size(10); topHits.sort("creationDate", SortOrder.DESC); topHits.sort("id", SortOrder.ASC); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); tags.size(10); tags.subAggregation(topHits); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java b/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java index 2b6a5640179ac..ed25de44ac84c 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java @@ -63,6 +63,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.InternalMax; import org.elasticsearch.search.aggregations.support.AggregationContext; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.FetchSubPhase; @@ -237,7 +238,7 @@ public void testFinalReduce() { SearchSourceBuilder source = new SearchSourceBuilder(); source.size(0); originalRequest.source(source); - TermsAggregationBuilder terms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.NUMERIC); + TermsAggregationBuilder terms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC); terms.field("price"); terms.size(1); source.aggregation(terms); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java b/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java index cc1d284a29217..2507dcd066789 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java @@ -44,6 +44,7 @@ import org.elasticsearch.search.aggregations.metrics.ExtendedStats; import org.elasticsearch.search.aggregations.metrics.Stats; import org.elasticsearch.search.aggregations.metrics.Sum; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.test.ESIntegTestCase; @@ -1189,7 +1190,7 @@ public void testScriptWithValueType() throws Exception { .size(0) .aggregation(terms("terms") .script(new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "42", Collections.emptyMap())) - .userValueTypeHint(randomFrom(ValueType.NUMERIC, ValueType.NUMBER))); + .userValueTypeHint(randomFrom(CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC))); String source = builder.toString(); try (XContentParser parser = createParser(JsonXContent.jsonXContent, source)) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java index a9137473ba814..b66cbe579f6ed 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java @@ -25,16 +25,12 @@ import org.elasticsearch.common.xcontent.ToXContentFragment; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.script.Script; -import org.elasticsearch.search.aggregations.support.AggregationContext; -import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; -import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; +import org.elasticsearch.search.aggregations.support.*; import org.elasticsearch.search.sort.SortOrder; import java.io.IOException; import java.time.ZoneId; +import java.util.Locale; import java.util.Objects; /** @@ -45,7 +41,7 @@ public abstract class CompositeValuesSourceBuilder, T> void declareValuesSource objectParser.declareBoolean(VB::missingBucket, new ParseField("missing_bucket")); objectParser.declareField(VB::userValuetypeHint, p -> { - ValueType valueType = ValueType.lenientParse(p.text()); + ValuesSourceType valueType = CoreValuesSourceType.fromString(p.text()); return valueType; }, new ParseField("value_type"), ObjectParser.ValueType.STRING); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java index d0e12b609a707..753412180a8c8 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java @@ -36,7 +36,6 @@ import org.elasticsearch.search.aggregations.support.MultiValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.search.aggregations.support.MultiValuesSourceParseHelper; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -53,7 +52,7 @@ public class WeightedAvgAggregationBuilder extends MultiValuesSourceAggregationB public static final ObjectParser PARSER = ObjectParser.fromBuilder(NAME, WeightedAvgAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, ValueType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); MultiValuesSourceParseHelper.declareField(VALUE_FIELD.getPreferredName(), PARSER, true, false, false); MultiValuesSourceParseHelper.declareField(WEIGHT_FIELD.getPreferredName(), PARSER, true, false, false); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java index 8858a3db3696c..2ace3519478bf 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java @@ -62,7 +62,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return new ValuesSource.Numeric.Script(script, scriptValueType); } @@ -112,7 +112,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return new ValuesSource.Bytes.Script(script); } @@ -150,7 +150,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } @@ -184,7 +184,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } @@ -212,7 +212,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return BYTES.getScript(script, scriptValueType); } @@ -239,7 +239,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return NUMERIC.getScript(script, scriptValueType); } @@ -354,7 +354,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return NUMERIC.getScript(script, scriptValueType); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java index cb40444de1678..b48d9f7da53f9 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java @@ -21,6 +21,7 @@ import org.elasticsearch.common.Nullable; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.DocValueFormat; @@ -31,6 +32,7 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -76,7 +78,7 @@ public AB subAggregations(Builder subFactories) { private Map fields = new HashMap<>(); - private ValueType userValueTypeHint = null; + private ValuesSourceType userValueTypeHint = null; private String format = null; protected MultiValuesSourceAggregationBuilder(String name) { @@ -107,14 +109,15 @@ protected MultiValuesSourceAggregationBuilder(StreamInput in) @SuppressWarnings("unchecked") private void read(StreamInput in) throws IOException { fields = in.readMap(StreamInput::readString, MultiValuesSourceFieldConfig::new); - userValueTypeHint = in.readOptionalWriteable(ValueType::readFromStream); + userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); format = in.readOptionalString(); } @Override protected final void doWriteTo(StreamOutput out) throws IOException { out.writeMap(fields, StreamOutput::writeString, (o, value) -> value.writeTo(o)); - out.writeOptionalWriteable(userValueTypeHint); + String type = userValueTypeHint.typeName(); + out.writeString(type.toUpperCase(Locale.ROOT)); out.writeOptionalString(format); innerWriteTo(out); } @@ -134,10 +137,10 @@ protected AB field(String propertyName, MultiValuesSourceFieldConfig config) { } /** - * Sets the {@link ValueType} for the value produced by this aggregation + * Sets the {@link ValuesSourceType} for the value produced by this aggregation */ @SuppressWarnings("unchecked") - public AB userValueTypeHint(ValueType valueType) { + public AB userValueTypeHint(ValuesSourceType valueType) { if (valueType == null) { throw new IllegalArgumentException("[userValueTypeHint] must not be null: [" + name + "]"); } @@ -182,13 +185,13 @@ protected final MultiValuesSourceAggregatorFactory doBuild(AggregationContext co } - private static DocValueFormat resolveFormat(@Nullable String format, @Nullable ValueType valueType, + private static DocValueFormat resolveFormat(@Nullable String format, @Nullable ValuesSourceType valueType, ValuesSourceType defaultValuesSourceType) { if (valueType == null) { // If the user didn't send a hint, all we can do is fall back to the default return defaultValuesSourceType.getFormatter(format, null); } - DocValueFormat valueFormat = valueType.defaultFormat; + DocValueFormat valueFormat = valueType.getFormatter(format, null); if (valueFormat instanceof DocValueFormat.Decimal && format != null) { valueFormat = new DocValueFormat.Decimal(format); } @@ -214,7 +217,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field(CommonFields.FORMAT.getPreferredName(), format); } if (userValueTypeHint != null) { - builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.getPreferredName()); + builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java index ac9cc06b07cdf..960ce3ccc5e34 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java @@ -29,11 +29,11 @@ public final class MultiValuesSourceParseHelper { public static void declareCommon( AbstractObjectParser, T> objectParser, boolean formattable, - ValueType expectedValueType) { + ValuesSourceType expectedValueType) { objectParser.declareField(MultiValuesSourceAggregationBuilder::userValueTypeHint, p -> { - ValueType valueType = ValueType.lenientParse(p.text()); - if (expectedValueType != null && valueType.isNotA(expectedValueType)) { + ValuesSourceType valueType = CoreValuesSourceType.fromString(p.text()); + if (expectedValueType != null && !valueType.equals(expectedValueType)) { throw new ParsingException(p.getTokenLocation(), "Aggregation [" + objectParser.getName() + "] was configured with an incompatible value type [" + valueType + "]. It can only work on value off type [" diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java index d8389ef9fd2e2..2497762090824 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java @@ -57,7 +57,7 @@ public enum ValueType implements Writeable { final ValuesSourceType valuesSourceType; final DocValueFormat defaultFormat; private final byte id; - private String preferredName; + private final String preferredName; public static final ParseField VALUE_TYPE = new ParseField("value_type", "valueType"); @@ -78,9 +78,9 @@ public ValuesSourceType getValuesSourceType() { return valuesSourceType; } - private static Set numericValueTypes = Set.of(ValueType.DOUBLE, ValueType.DATE, ValueType.LONG, ValueType.NUMBER, + private static final Set numericValueTypes = Set.of(ValueType.DOUBLE, ValueType.DATE, ValueType.LONG, ValueType.NUMBER, ValueType.NUMERIC, ValueType.BOOLEAN); - private static Set stringValueTypes = Set.of(ValueType.STRING, ValueType.IP); + private static final Set stringValueTypes = Set.of(ValueType.STRING, ValueType.IP); /** * This is a bit of a hack to mirror the old {@link ValueType} behavior, which would allow a rough compatibility between types. This diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java index 879d4a25441f0..bad4eaf6f0075 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java @@ -534,16 +534,16 @@ public SortedNumericDoubleValues doubleValues(LeafReaderContext context) { */ public static class Script extends Numeric { private final AggregationScript.LeafFactory script; - private final ValueType scriptValueType; + private final ValuesSourceType scriptValueType; - public Script(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public Script(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { this.script = script; this.scriptValueType = scriptValueType; } @Override public boolean isFloatingPoint() { - return scriptValueType != null ? scriptValueType == ValueType.DOUBLE : true; + return scriptValueType != null ? scriptValueType == CoreValuesSourceType.NUMERIC : true; } @Override diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java index 0bcf83be0237b..e64a47249e136 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java @@ -35,6 +35,7 @@ import java.io.IOException; import java.time.ZoneId; import java.time.ZoneOffset; +import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -60,7 +61,7 @@ public static void declareFields( ParseField.CommonFields.MISSING, ObjectParser.ValueType.VALUE); objectParser.declareField(ValuesSourceAggregationBuilder::userValueTypeHint, p -> { - ValueType type = ValueType.lenientParse(p.text()); + ValuesSourceType type = CoreValuesSourceType.fromString(p.text()); if (type == null) { throw new IllegalArgumentException("Unknown value type [" + p.text() + "]"); } @@ -135,7 +136,7 @@ public final BucketCardinality bucketCardinality() { private String field = null; private Script script = null; - private ValueType userValueTypeHint = null; + private ValuesSourceType userValueTypeHint = null; private String format = null; private Object missing = null; private ZoneId timeZone = null; @@ -179,7 +180,7 @@ private void read(StreamInput in) throws IOException { script = new Script(in); } if (in.readBoolean()) { - userValueTypeHint = ValueType.readFromStream(in); + this.userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); } format = in.readOptionalString(); missing = in.readGenericValue(); @@ -201,7 +202,7 @@ protected final void doWriteTo(StreamOutput out) throws IOException { boolean hasValueType = userValueTypeHint != null; out.writeBoolean(hasValueType); if (hasValueType) { - userValueTypeHint.writeTo(out); + out.writeString(userValueTypeHint.typeName().toUpperCase(Locale.ROOT)); } out.writeOptionalString(format); out.writeGenericValue(missing); @@ -267,11 +268,11 @@ public Script script() { * This setter should only be used during parsing, to set the userValueTypeHint. This is information the user provides in the json * query to indicate the output type of a script or the type of the 'missing' replacement value. * - * @param valueType - The parsed {@link ValueType} based on the string the user specified + * @param valueType - The parsed {@link ValuesSourceType} based on the string the user specified * @return - The modified builder instance, for chaining. */ @SuppressWarnings("unchecked") - public AB userValueTypeHint(ValueType valueType) { + public AB userValueTypeHint(ValuesSourceType valueType) { if (valueType == null) { // TODO: This is nonsense. We allow the value to be null (via constructor), but don't allow it to be set to null. This means // thing looking to copy settings (like RollupRequestTranslator) need to check if userValueTypeHint is not null, and then @@ -282,7 +283,7 @@ public AB userValueTypeHint(ValueType valueType) { return (AB) this; } - public ValueType userValueTypeHint() { + public ValuesSourceType userValueTypeHint() { return userValueTypeHint; } @@ -414,7 +415,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field("time_zone", timeZone.toString()); } if (userValueTypeHint != null) { - builder.field("value_type", userValueTypeHint.getPreferredName()); + builder.field("value_type", userValueTypeHint.typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java index bb4386360fc20..9e8e446ae21cc 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java @@ -55,7 +55,7 @@ public class ValuesSourceConfig { * @return - An initialized {@link ValuesSourceConfig} that will yield the appropriate {@link ValuesSourceType} */ public static ValuesSourceConfig resolve(AggregationContext context, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, String field, Script script, Object missing, @@ -85,7 +85,7 @@ public static ValuesSourceConfig resolve(AggregationContext context, * @return - An initialized {@link ValuesSourceConfig} that will yield the appropriate {@link ValuesSourceType} */ public static ValuesSourceConfig resolveUnregistered(AggregationContext context, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, String field, Script script, Object missing, @@ -105,24 +105,24 @@ public static ValuesSourceConfig resolveUnregistered(AggregationContext context, } private static ValuesSourceConfig internalResolve(AggregationContext context, - ValueType userValueTypeHint, - String field, - Script script, - Object missing, - ZoneId timeZone, - String format, - ValuesSourceType defaultValueSourceType, - FieldResolver fieldResolver + ValuesSourceType userValueTypeHint, + String field, + Script script, + Object missing, + ZoneId timeZone, + String format, + ValuesSourceType defaultValueSourceType, + FieldResolver fieldResolver ) { ValuesSourceConfig config; ValuesSourceType valuesSourceType = null; - ValueType scriptValueType = userValueTypeHint; + ValuesSourceType scriptValueType = userValueTypeHint; FieldContext fieldContext = null; AggregationScript.LeafFactory aggregationScript = createScript(script, context); // returns null if script is null boolean unmapped = false; if (userValueTypeHint != null) { // If the user gave us a type hint, respect that. - valuesSourceType = userValueTypeHint.getValuesSourceType(); + valuesSourceType = userValueTypeHint; } if (field == null) { if (script == null) { @@ -169,14 +169,14 @@ private static ValuesSourceConfig internalResolve(AggregationContext context, private interface FieldResolver { ValuesSourceType getValuesSourceType( FieldContext fieldContext, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, ValuesSourceType defaultValuesSourceType); } private static ValuesSourceType getMappingFromRegistry( FieldContext fieldContext, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, ValuesSourceType defaultValuesSourceType ) { return fieldContext.indexFieldData().getValuesSourceType(); @@ -184,7 +184,7 @@ private static ValuesSourceType getMappingFromRegistry( private static ValuesSourceType getLegacyMapping( FieldContext fieldContext, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, ValuesSourceType defaultValuesSourceType ) { IndexFieldData indexFieldData = fieldContext.indexFieldData(); @@ -198,7 +198,7 @@ private static ValuesSourceType getLegacyMapping( if (userValueTypeHint == null) { return defaultValuesSourceType; } else { - return userValueTypeHint.getValuesSourceType(); + return userValueTypeHint; } } } @@ -228,7 +228,7 @@ private static DocValueFormat resolveFormat(@Nullable String format, @Nullable V */ public static ValuesSourceConfig resolveFieldOnly(MappedFieldType fieldType, AggregationContext context) { FieldContext fieldContext = context.buildFieldContext(fieldType); - ValuesSourceType vstype = fieldContext.indexFieldData().getValuesSourceType(); + ValuesSourceType vstype = fieldContext.indexFieldData().getValuesSourceType(); return new ValuesSourceConfig(vstype, fieldContext, false, null, null, null, null, null, context); } @@ -242,7 +242,7 @@ public static ValuesSourceConfig resolveUnmapped(ValuesSourceType valuesSourceTy private final ValuesSourceType valuesSourceType; private final FieldContext fieldContext; private final AggregationScript.LeafFactory script; - private final ValueType scriptValueType; + private final ValuesSourceType scriptValueType; private final boolean unmapped; private final DocValueFormat format; private final Object missing; @@ -258,7 +258,7 @@ public ValuesSourceConfig( FieldContext fieldContext, boolean unmapped, AggregationScript.LeafFactory script, - ValueType scriptValueType, + ValuesSourceType scriptValueType, Object missing, ZoneId timeZone, DocValueFormat format, @@ -341,7 +341,7 @@ public boolean valid() { return fieldContext != null || script != null || unmapped; } - public ValueType scriptValueType() { + public ValuesSourceType scriptValueType() { return this.scriptValueType; } @@ -403,7 +403,7 @@ public boolean alignesWithSearchIndex() { */ public String getDescription() { if (script != null) { - return "Script yielding [" + (scriptValueType != null ? scriptValueType.getPreferredName() : "unknown type") + "]"; + return "Script yielding [" + (scriptValueType != null ? scriptValueType.typeName() : "unknown type") + "]"; } MappedFieldType fieldType = fieldType(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java index 9d86b700622ac..d0f7e1f4354f2 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java @@ -60,7 +60,7 @@ public interface ValuesSourceType { * @param scriptValueType - The expected output type of the script * @return - Script specialization of the base {@link ValuesSource} */ - ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType); + ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType); /** * Return a {@link ValuesSource} wrapping a field for the given type. All {@link ValuesSource}s must implement this method. diff --git a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java index 5a5df0e514052..5f81758efd064 100644 --- a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java +++ b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java @@ -76,6 +76,7 @@ import org.elasticsearch.search.aggregations.MultiBucketConsumerService; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.FetchSearchResult; @@ -715,7 +716,7 @@ public void testCanMatch() throws Exception { new AliasFilter(null, Strings.EMPTY_ARRAY), 1f, -1, null, null)).canMatch()); searchRequest.source(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(0))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(0))); assertTrue(service.canMatch(new ShardSearchRequest(OriginalIndices.NONE, searchRequest, indexShard.shardId(), 1, new AliasFilter(null, Strings.EMPTY_ARRAY), 1f, -1, null, null)).canMatch()); searchRequest.source(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) @@ -776,12 +777,12 @@ public void testCanRewriteToMatchNone() { assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder())); assertFalse(SearchService.canRewriteToMatchNone(null)); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(0)))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(0)))); assertTrue(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new TermQueryBuilder("foo", "bar")))); assertTrue(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(1)))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(1)))); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(1)) + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(1)) .suggest(new SuggestBuilder()))); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new TermQueryBuilder("foo", "bar")) .suggest(new SuggestBuilder()))); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java index 0f93bf734b6ba..958706f36d6bd 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java @@ -34,6 +34,7 @@ import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; @@ -168,7 +169,7 @@ public void testRewrite() throws IOException { assertTrue(((FiltersAggregationBuilder) rewritten).isKeyed()); // test sub-agg filter that does rewrite - original = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.BOOLEAN) + original = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BOOLEAN) .subAggregation( new FiltersAggregationBuilder("my-agg", new KeyedFilter("my-filter", new BoolQueryBuilder())) ); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java index 60ccb9a4562fc..8e781a8be315f 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java @@ -72,6 +72,7 @@ import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.TopHits; import org.elasticsearch.search.aggregations.metrics.TopHitsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.test.IndexSettingsModule; @@ -1845,7 +1846,7 @@ public void testWithTermsSubAggExecutionMode() throws Exception { .field("keyword"); return new CompositeAggregationBuilder("name", Collections.singletonList(terms)) .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("terms") .collectMode(mode) .subAggregation(new MaxAggregationBuilder("max").field("long")) @@ -1873,7 +1874,7 @@ public void testWithTermsSubAggExecutionMode() throws Exception { .field("keyword"); return new CompositeAggregationBuilder("name", Collections.singletonList(terms)) .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("terms") .collectMode(mode) .subAggregation(new MaxAggregationBuilder("max").field("long")) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java index 078450445f546..5d27aff829f27 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java @@ -76,6 +76,7 @@ import org.elasticsearch.search.aggregations.pipeline.BucketScriptPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; @@ -417,7 +418,7 @@ public void testNestedOrdering() throws IOException { = new NumberFieldMapper.NumberFieldType("num_pages", NumberFieldMapper.NumberType.LONG); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("author"); - TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) .field("author").order(BucketOrder.aggregation("chapters>num_pages.value", true)); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); MaxAggregationBuilder maxAgg = new MaxAggregationBuilder("num_pages").field("num_pages"); @@ -466,7 +467,7 @@ public void testNestedOrdering() throws IOException { assertEquals(70, (int) numPages.getValue()); // reverse order: - termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(ValueType.STRING) + termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) .field("author").order(BucketOrder.aggregation("chapters>num_pages.value", false)); nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); maxAgg = new MaxAggregationBuilder("num_pages").field("num_pages"); @@ -554,7 +555,7 @@ public void testNestedOrdering_random() throws IOException { = new NumberFieldMapper.NumberFieldType("num_pages", NumberFieldMapper.NumberType.LONG); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("author"); - TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) .size(books.size()).field("author") .order(BucketOrder.compound(BucketOrder.aggregation("chapters>num_pages.value", true), BucketOrder.key(true))); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); @@ -646,9 +647,9 @@ public void testPreGetChildLeafCollectors() throws IOException { iw.commit(); } try (IndexReader indexReader = wrapInMockESDirectoryReader(DirectoryReader.open(directory))) { - TermsAggregationBuilder valueBuilder = new TermsAggregationBuilder("value").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder valueBuilder = new TermsAggregationBuilder("value").userValueTypeHint(CoreValuesSourceType.BYTES) .field("value"); - TermsAggregationBuilder keyBuilder = new TermsAggregationBuilder("key").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder keyBuilder = new TermsAggregationBuilder("key").userValueTypeHint(CoreValuesSourceType.BYTES) .field("key"); keyBuilder.subAggregation(valueBuilder); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder(NESTED_AGG, "nested_field"); @@ -759,7 +760,7 @@ public void testNestedWithPipeline() throws IOException { } try (IndexReader indexReader = wrapInMockESDirectoryReader(DirectoryReader.open(directory))) { NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder(NESTED_AGG, NESTED_OBJECT) - .subAggregation(new TermsAggregationBuilder("terms").field(VALUE_FIELD_NAME).userValueTypeHint(ValueType.NUMERIC) + .subAggregation(new TermsAggregationBuilder("terms").field(VALUE_FIELD_NAME).userValueTypeHint(CoreValuesSourceType.NUMERIC) .subAggregation(new MaxAggregationBuilder(MAX_AGG_NAME).field(VALUE_FIELD_NAME)) .subAggregation(new BucketScriptPipelineAggregationBuilder("bucketscript", Collections.singletonMap("_value", MAX_AGG_NAME), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java index 9f39e0e896d3a..67bf784a4a2e6 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java @@ -35,7 +35,9 @@ import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregatorTestCase; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -61,7 +63,7 @@ public class BinaryTermsAggregatorTests extends AggregatorTestCase { public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), ValueType.STRING + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.BYTES ); } @@ -97,7 +99,7 @@ public void testBadIncludeExclude() throws IOException { e = expectThrows(AggregationExecutionException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD).includeExclude(includeExclude).format("yyyy-MM-dd"), - agg -> fail("test should have failed with exception"), ValueType.STRING // string type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.BYTES // string type hint )); assertThat(e.getMessage(), equalTo("Aggregation [_name] cannot support regular expression style include/exclude settings as " + "they can only be applied to string fields. Use an array of values for include/exclude clauses")); @@ -106,14 +108,14 @@ public void testBadIncludeExclude() throws IOException { public void testBadUserValueTypeHint() throws IOException { IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD), - agg -> fail("test should have failed with exception"), ValueType.NUMERIC // numeric type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.NUMERIC // numeric type hint )); assertThat(e.getMessage(), equalTo("Expected numeric type on field [binary], but got [binary]")); } private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValueType valueType) throws IOException { + Consumer verify, ValuesSourceType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java index 4e049c7e3a176..c080cf565ae3b 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java @@ -32,7 +32,9 @@ import org.elasticsearch.index.mapper.KeywordFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.search.aggregations.AggregatorTestCase; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -63,7 +65,7 @@ public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(KEYWORD_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), ValueType.STRING // with type hint + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.BYTES // with type hint ); } @@ -91,13 +93,13 @@ public void testMatchAllDocs() throws IOException { assertThat(bucket.getKey(), equalTo(String.valueOf(9L - i))); assertThat(bucket.getDocCount(), equalTo(9L - i)); } - }, ValueType.STRING // with type hint + }, CoreValuesSourceType.BYTES // with type hint ); } private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValueType valueType) throws IOException { + Consumer verify, ValuesSourceType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java index 174a8a1aed6e8..7f78ae145f2a2 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java @@ -34,7 +34,9 @@ import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregatorTestCase; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -66,7 +68,7 @@ public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(LONG_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), ValueType.NUMERIC // with type hint + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.NUMERIC // with type hint ); } @@ -94,7 +96,7 @@ public void testMatchAllDocs() throws IOException { assertThat(bucket.getKey(), equalTo(9L - i)); assertThat(bucket.getDocCount(), equalTo(9L - i)); } - }, ValueType.NUMERIC //with type hint + }, CoreValuesSourceType.NUMERIC //with type hint ); } @@ -115,7 +117,7 @@ public void testBadIncludeExclude() throws IOException { e = expectThrows(AggregationExecutionException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(LONG_FIELD).includeExclude(includeExclude).format("yyyy-MM-dd"), - agg -> fail("test should have failed with exception"), ValueType.NUMERIC // with type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.NUMERIC // with type hint )); assertThat(e.getMessage(), equalTo("Aggregation [_name] cannot support regular expression style " + "include/exclude settings as they can only be applied to string fields. Use an array of numeric " + @@ -125,7 +127,7 @@ public void testBadIncludeExclude() throws IOException { private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValueType valueType) throws IOException { + Consumer verify, ValuesSourceType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java index f5697e0153f50..47b1176329a99 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java @@ -18,6 +18,7 @@ */ package org.elasticsearch.search.aggregations.bucket.terms; +import org.apache.logging.log4j.core.Core; import org.apache.lucene.document.BinaryDocValuesField; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; @@ -179,7 +180,7 @@ public void testUsesGlobalOrdinalsByDefault() throws Exception { // We do not use LuceneTestCase.newSearcher because we need a DirectoryReader IndexSearcher indexSearcher = new IndexSearcher(indexReader); - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("string"); MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType("string"); @@ -247,7 +248,7 @@ public void testSimple() throws Exception { IndexSearcher indexSearcher = newIndexSearcher(indexReader); for (TermsAggregatorFactory.ExecutionMode executionMode : TermsAggregatorFactory.ExecutionMode.values()) { TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionMode.toString()) .field("string") .order(BucketOrder.key(true)); @@ -315,7 +316,7 @@ public void testStringIncludeExclude() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null)) .field("mv_field") @@ -351,7 +352,7 @@ public void testStringIncludeExclude() throws Exception { assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("sv_field"); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null)) .field("sv_field") @@ -375,7 +376,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(4).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", "(val000|val001)")) .field("mv_field") @@ -405,7 +406,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(7).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, "val00.+")) .field("mv_field") @@ -422,7 +423,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(new String[]{"val000", "val010"}, null)) .field("mv_field") @@ -439,7 +440,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new String[]{"val001", "val002", "val003", "val004", "val005", "val006", "val007", "val008", "val009", "val011"})) @@ -457,7 +458,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null, null, new String[]{"val001", "val002", "val003", "val004", "val005", "val006", "val007", "val008"})) @@ -475,7 +476,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, "val01.+", new String[]{"val001", "val002", "val010"}, null)) @@ -531,7 +532,7 @@ public void testNumericIncludeExclude() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.LONG) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(new long[]{0, 5}, null)) .field("long_field") @@ -548,7 +549,7 @@ public void testNumericIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.LONG) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new long[]{0, 5})) .field("long_field") @@ -571,7 +572,7 @@ public void testNumericIncludeExclude() throws Exception { fieldType = new NumberFieldMapper.NumberFieldType("double_field", NumberFieldMapper.NumberType.DOUBLE); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.DOUBLE) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(new double[]{0.0, 5.0}, null)) .field("double_field") @@ -588,7 +589,7 @@ public void testNumericIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.DOUBLE) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new double[]{0.0, 5.0})) .field("double_field") @@ -622,9 +623,9 @@ public void testStringTermsAggregator() throws Exception { } }; MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType("field"); - termsAggregator(ValueType.STRING, fieldType, i -> Integer.toString(i), + termsAggregator(CoreValuesSourceType.BYTES, fieldType, i -> Integer.toString(i), String::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(ValueType.STRING, fieldType, i -> Integer.toString(i), + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.BYTES, fieldType, i -> Integer.toString(i), val -> new SortedDocValuesField("field", new BytesRef(val))); } @@ -638,8 +639,8 @@ public void testLongTermsAggregator() throws Exception { }; MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("field", NumberFieldMapper.NumberType.LONG); - termsAggregator(ValueType.LONG, fieldType, Integer::longValue, Long::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(ValueType.LONG, fieldType, Integer::longValue, val -> new NumericDocValuesField("field", val)); + termsAggregator(CoreValuesSourceType.NUMERIC, fieldType, Integer::longValue, Long::compareTo, luceneFieldFactory); + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.NUMERIC, fieldType, Integer::longValue, val -> new NumericDocValuesField("field", val)); } public void testDoubleTermsAggregator() throws Exception { @@ -652,8 +653,8 @@ public void testDoubleTermsAggregator() throws Exception { }; MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("field", NumberFieldMapper.NumberType.DOUBLE); - termsAggregator(ValueType.DOUBLE, fieldType, Integer::doubleValue, Double::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(ValueType.DOUBLE, fieldType, Integer::doubleValue, + termsAggregator(CoreValuesSourceType.NUMERIC, fieldType, Integer::doubleValue, Double::compareTo, luceneFieldFactory); + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.NUMERIC, fieldType, Integer::doubleValue, val -> new NumericDocValuesField("field", Double.doubleToRawLongBits(val))); } @@ -671,11 +672,11 @@ public void testIpTermsAggregator() throws Exception { BytesRef b2 = new BytesRef(InetAddressPoint.encode(o2)); return b1.compareTo(b2); }; - termsAggregator(ValueType.IP, new IpFieldMapper.IpFieldType("field"), i -> base[0] = InetAddressPoint.nextUp(base[0]), + termsAggregator(CoreValuesSourceType.IP, new IpFieldMapper.IpFieldType("field"), i -> base[0] = InetAddressPoint.nextUp(base[0]), comparator, luceneFieldFactory); } - private void termsAggregator(ValueType valueType, MappedFieldType fieldType, + private void termsAggregator(ValuesSourceType valueType, MappedFieldType fieldType, Function valueFactory, Comparator keyComparator, BiFunction luceneFieldFactory) throws Exception { final Map counts = new HashMap<>(); @@ -768,7 +769,7 @@ private void termsAggregator(ValueType valueType, MappedFieldType fieldType, for (int i = 0; i < size; i++) { Map.Entry expected = expectedBuckets.get(i); Terms.Bucket actual = result.getBuckets().get(i); - if (valueType == ValueType.IP) { + if (valueType == CoreValuesSourceType.IP) { assertEquals(String.valueOf(expected.getKey()).substring(1), actual.getKey()); } else { assertEquals(expected.getKey(), actual.getKey()); @@ -799,7 +800,7 @@ private void termsAggregator(ValueType valueType, MappedFieldType fieldType, assertEquals(expectedFilteredCounts, result.getBuckets().size()); for (Terms.Bucket actual : result.getBuckets()) { Integer expectedCount; - if (valueType == ValueType.IP) { + if (valueType == CoreValuesSourceType.IP) { expectedCount = filteredCounts.get(InetAddresses.forString((String)actual.getKey())); } else { expectedCount = filteredCounts.get(actual.getKey()); @@ -812,7 +813,7 @@ private void termsAggregator(ValueType valueType, MappedFieldType fieldType, } } - private void termsAggregatorWithNestedMaxAgg(ValueType valueType, MappedFieldType fieldType, + private void termsAggregatorWithNestedMaxAgg(ValuesSourceType valueType, MappedFieldType fieldType, Function valueFactory, Function luceneFieldFactory) throws Exception { final Map counts = new HashMap<>(); @@ -885,7 +886,7 @@ public void testEmpty() throws Exception { try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { IndexSearcher indexSearcher = newIndexSearcher(indexReader); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field("string"); SearchContext context = createSearchContext(indexSearcher, null, fieldType1); Aggregator aggregator = createAggregator(aggregationBuilder, context); @@ -895,7 +896,7 @@ public void testEmpty() throws Exception { assertEquals("_name", result.getName()); assertEquals(0, result.getBuckets().size()); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.LONG).field("long"); + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC).field("long"); context = createSearchContext(indexSearcher, null, fieldType2); aggregator = createAggregator(aggregationBuilder, context); aggregator.preCollection(); @@ -904,7 +905,7 @@ public void testEmpty() throws Exception { assertEquals("_name", result.getName()); assertEquals(0, result.getBuckets().size()); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.DOUBLE).field("double"); + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC).field("double"); context = createSearchContext(indexSearcher, null, fieldType3); aggregator = createAggregator(aggregationBuilder, context); aggregator.preCollection(); @@ -922,7 +923,7 @@ public void testUnmapped() throws Exception { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { IndexSearcher indexSearcher = newIndexSearcher(indexReader); - ValueType[] valueTypes = new ValueType[]{ValueType.STRING, ValueType.LONG, ValueType.DOUBLE}; + ValuesSourceType[] valueTypes = new ValuesSourceType[]{CoreValuesSourceType.BYTES, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC}; String[] fieldNames = new String[]{"string", "long", "double"}; for (int i = 0; i < fieldNames.length; i++) { TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") @@ -955,7 +956,7 @@ public void testUnmappedWithMissing() throws Exception { MappedFieldType fieldType1 = new KeywordFieldMapper.KeywordFieldType("unrelated_value"); IndexSearcher indexSearcher = newIndexSearcher(indexReader); - ValueType[] valueTypes = new ValueType[]{ValueType.STRING, ValueType.LONG, ValueType.DOUBLE}; + ValuesSourceType[] valueTypes = new ValuesSourceType[]{CoreValuesSourceType.BYTES, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC}; String[] fieldNames = new String[]{"string", "long", "double"}; Object[] missingValues = new Object[]{"abc", 19L, 19.2}; @@ -1070,12 +1071,12 @@ public void testNestedTermsAgg() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); Aggregator.SubAggCollectionMode collectionMode = randomFrom(Aggregator.SubAggCollectionMode.values()); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name1") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("field1") .order(BucketOrder.key(true)) - .subAggregation(new TermsAggregationBuilder("_name2").userValueTypeHint(ValueType.STRING) + .subAggregation(new TermsAggregationBuilder("_name2").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("field2") @@ -1109,7 +1110,7 @@ public void testNestedTermsAgg() throws Exception { public void testMixLongAndDouble() throws Exception { for (TermsAggregatorFactory.ExecutionMode executionMode : TermsAggregatorFactory.ExecutionMode.values()) { - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.LONG) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionMode.toString()) .field("number") .order(BucketOrder.key(true)); @@ -1177,13 +1178,13 @@ public void testGlobalAggregationWithScore() throws IOException { Aggregator.SubAggCollectionMode collectionMode = randomFrom(Aggregator.SubAggCollectionMode.values()); GlobalAggregationBuilder globalBuilder = new GlobalAggregationBuilder("global") .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("keyword") .order(BucketOrder.key(true)) .subAggregation( - new TermsAggregationBuilder("sub_terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("sub_terms").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("keyword").order(BucketOrder.key(true)) @@ -1228,7 +1229,7 @@ public void testWithNestedAggregations() throws IOException { for (Aggregator.SubAggCollectionMode mode : Aggregator.SubAggCollectionMode.values()) { for (boolean withScore : new boolean[]{true, false}) { NestedAggregationBuilder nested = new NestedAggregationBuilder("nested", "nested_object") - .subAggregation(new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.LONG) + .subAggregation(new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("nested_value") // force the breadth_first mode .collectMode(mode) @@ -1272,7 +1273,7 @@ public void testNumberToStringValueScript() throws IOException { = new NumberFieldMapper.NumberFieldType("number", NumberFieldMapper.NumberType.INTEGER); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field("number") .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, STRING_SCRIPT_NAME, Collections.emptyMap())); @@ -1400,7 +1401,7 @@ public void testOrderByPipelineAggregation() throws Exception { "script", new Script("2.718")); TermsAggregationBuilder termsAgg = terms("terms") .field("field") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .order(BucketOrder.aggregation("script", true)) .subAggregation(bucketScriptAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java index b41d726da54af..96ed5fa92a595 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java @@ -53,7 +53,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.lookup.LeafDocLookup; @@ -511,7 +510,7 @@ public void testMultiValuedFieldWithValueScript() throws IOException { public void testOrderByEmptyAggregation() throws IOException { MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("value", NumberFieldMapper.NumberType.INTEGER); - AggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.NUMERIC) + AggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value") .order(BucketOrder.compound(BucketOrder.aggregation("filter>avg", true))) .subAggregation(AggregationBuilders.filter("filter", termQuery("value", 100)) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java index 3b980cbd8bb87..a443c1a8f67b8 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java @@ -730,7 +730,7 @@ public void testEmptyAggregation() throws Exception { public void testOrderByEmptyAggregation() throws IOException { MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("value", NumberFieldMapper.NumberType.INTEGER); - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.NUMERIC) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value") .order(BucketOrder.compound(BucketOrder.aggregation("filter>max", true))) .subAggregation(AggregationBuilders.filter("filter", termQuery("value", 100)) @@ -843,7 +843,7 @@ public void testNestedEarlyTermination() throws Exception { ValueCountAggregationBuilder countAggregationBuilder = new ValueCountAggregationBuilder("count") .field("values"); TermsAggregationBuilder termsAggregationBuilder = new TermsAggregationBuilder("terms") - .userValueTypeHint(ValueType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value").collectMode(collectionMode) .subAggregation(new MaxAggregationBuilder("sub_max").field("invalid")); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java index 60782469d8486..a99a8df2e34ae 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java @@ -379,7 +379,7 @@ private void testAggregation(Query query, ValueCountAggregationBuilder aggregationBuilder = new ValueCountAggregationBuilder("_name"); if (valueType != null && testWithHint) { - aggregationBuilder.userValueTypeHint(valueType); + aggregationBuilder.userValueTypeHint(valueType.getValuesSourceType()); } aggregationBuilder.field(FIELD_NAME); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java index 5bc4eb7be9e37..7172bbb18781d 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java @@ -26,6 +26,7 @@ import org.elasticsearch.search.SearchModule; import org.elasticsearch.search.aggregations.AggregatorFactories; import org.elasticsearch.search.aggregations.metrics.WeightedAvgAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.test.AbstractSerializingTestCase; import org.junit.Before; @@ -66,6 +67,7 @@ protected WeightedAvgAggregationBuilder createTestInstance() { MultiValuesSourceFieldConfig valueConfig = new MultiValuesSourceFieldConfig.Builder().setFieldName("value_field").build(); MultiValuesSourceFieldConfig weightConfig = new MultiValuesSourceFieldConfig.Builder().setFieldName("weight_field").build(); WeightedAvgAggregationBuilder aggregationBuilder = new WeightedAvgAggregationBuilder(aggregationName) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .value(valueConfig) .weight(weightConfig); return aggregationBuilder; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java index 42476765e1ab9..5b20ade698509 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected AvgBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java index e1a187b0e1327..e5d499052e13e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java @@ -47,6 +47,7 @@ import org.elasticsearch.search.aggregations.bucket.filter.InternalFilters; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; @@ -75,7 +76,7 @@ public void testScript() throws IOException { MappedFieldType fieldType1 = new KeywordFieldMapper.KeywordFieldType("the_field"); FiltersAggregationBuilder filters = new FiltersAggregationBuilder("placeholder", new MatchAllQueryBuilder()) - .subAggregation(new TermsAggregationBuilder("the_terms").userValueTypeHint(ValueType.STRING).field("the_field") + .subAggregation(new TermsAggregationBuilder("the_terms").userValueTypeHint(CoreValuesSourceType.BYTES).field("the_field") .subAggregation(new AvgAggregationBuilder("the_avg").field("number_field"))) .subAggregation(new BucketScriptPipelineAggregationBuilder("bucket_script", Collections.singletonMap("the_avg", "the_terms['test1']>the_avg.value"), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java index a7e2db4bada33..cb8085e24de2a 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java @@ -24,6 +24,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -62,7 +63,7 @@ public void testSigmaFromInt() throws Exception { public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java index 7713a9f8d095c..5a61b4bbcf776 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected MaxBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java index e9d3e15a3fa2b..efe2661eea3c8 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected MinBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java index 0b8757441cdb4..624d8a851af79 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java @@ -24,6 +24,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -66,7 +67,7 @@ public void testPercentsFromMixedArray() throws Exception { public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java index dffef51f643dd..c707d1322db00 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -40,7 +41,7 @@ protected StatsBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(St public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java index fc8c1be801313..00536f943009f 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected SumBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java index d1caaacafe077..15d23e76fb5f7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java @@ -71,13 +71,13 @@ public void testUnmappedKeyword() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.STRING, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Bytes valuesSource = (ValuesSource.Bytes) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, ValueType.STRING, "field", null, "abc", null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "field", null, "abc", null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Bytes) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedBinaryDocValues values = valuesSource.bytesValues(ctx); @@ -128,13 +128,13 @@ public void testUnmappedLong() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.NUMBER, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.NUMERIC, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Numeric valuesSource = (ValuesSource.Numeric) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, ValueType.NUMBER, "field", null, 42, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.NUMERIC, "field", null, 42, null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Numeric) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedNumericDocValues values = valuesSource.longValues(ctx); @@ -185,13 +185,13 @@ public void testUnmappedBoolean() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.BOOLEAN, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BOOLEAN, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Numeric valuesSource = (ValuesSource.Numeric) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, ValueType.BOOLEAN, "field", null, true, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BOOLEAN, "field", null, true, null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Numeric) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedNumericDocValues values = valuesSource.longValues(ctx); @@ -221,7 +221,7 @@ public void testFieldAlias() throws Exception { })); withAggregationContext(mapperService, List.of(source(b -> b.field("field", "value"))), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.STRING, "alias", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "alias", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Bytes valuesSource = (ValuesSource.Bytes) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java index d5ac7e5dd4904..eb6f09900dbeb 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java @@ -12,7 +12,6 @@ import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -27,7 +26,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java index cc46f7cf08957..bf16331fe322d 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java @@ -44,7 +44,7 @@ public class TTestAggregationBuilder extends MultiValuesSourceAggregationBuilder ObjectParser.fromBuilder(NAME, TTestAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, ValueType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); MultiValuesSourceParseHelper.declareField(A_FIELD.getPreferredName(), PARSER, true, false, true); MultiValuesSourceParseHelper.declareField(B_FIELD.getPreferredName(), PARSER, true, false, true); PARSER.declareString(TTestAggregationBuilder::testType, TYPE_FIELD); diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java index a0a536a7e98b4..e3d949881c32f 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java @@ -225,9 +225,9 @@ public void testNestedAggregation() throws IOException { textFieldType.setFielddata(true); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms") - .userValueTypeHint(ValueType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value") - .subAggregation(new StringStatsAggregationBuilder("text_stats").field("text").userValueTypeHint(ValueType.STRING)); + .subAggregation(new StringStatsAggregationBuilder("text_stats").field("text").userValueTypeHint(CoreValuesSourceType.BYTES)); Directory directory = newDirectory(); RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory); diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java index 346dbb3b6f6df..ffaaec596a17a 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java @@ -11,7 +11,6 @@ import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.xpack.aggregatemetric.fielddata.IndexAggregateDoubleMetricFieldData; @@ -27,7 +26,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("Value source of type [" + this.value() + "] is not supported by scripts"); } diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java index 205c25ed60ce6..372daab7c340a 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java @@ -13,6 +13,7 @@ import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.xpack.core.rollup.RollupField; @@ -308,7 +309,7 @@ public void testComparableNoTermsVsTerms() { DateHistogramAggregationBuilder builder = new DateHistogramAggregationBuilder("foo").field("foo") .calendarInterval(new DateHistogramInterval("1h")) - .subAggregation(new TermsAggregationBuilder("histo").userValueTypeHint(ValueType.STRING).field("bar")); + .subAggregation(new TermsAggregationBuilder("histo").userValueTypeHint(CoreValuesSourceType.BYTES).field("bar")); Set caps = new HashSet<>(2); caps.add(cap); diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java index d12605c27f3a6..32fa5577ab6f9 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.StatsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder; import org.elasticsearch.test.ESTestCase; @@ -302,7 +303,7 @@ public void testAvgMetric() { public void testStringTerms() throws IOException { - TermsAggregationBuilder terms = new TermsAggregationBuilder("test_string_terms").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder terms = new TermsAggregationBuilder("test_string_terms").userValueTypeHint(CoreValuesSourceType.BYTES); terms.field("foo") .subAggregation(new MaxAggregationBuilder("the_max").field("max_field")) .subAggregation(new AvgAggregationBuilder("the_avg").field("avg_field")); diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java index 9387cac83912f..369ddd28186a0 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java @@ -66,6 +66,7 @@ import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.internal.InternalSearchResponse; import org.elasticsearch.xpack.core.rollup.RollupField; @@ -926,10 +927,10 @@ public void testMetric() throws IOException { public void testUnsupportedMetric() throws IOException { - AggregationBuilder nonRollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(ValueType.LONG) + AggregationBuilder nonRollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("foo"); String fieldName = "foo.max." + RollupField.VALUE; - AggregationBuilder rollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(ValueType.LONG) + AggregationBuilder rollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field(fieldName); MappedFieldType nrFTvalue = new NumberFieldMapper.NumberFieldType("foo", NumberFieldMapper.NumberType.LONG); @@ -954,10 +955,10 @@ public void testUnsupportedMetric() throws IOException { } public void testStringTerms() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("stringfield.terms." + RollupField.COUNT_FIELD)); @@ -986,10 +987,10 @@ public void testStringTerms() throws IOException { } public void testStringTermsNullValue() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("stringfield.terms." + RollupField.COUNT_FIELD)); @@ -1024,10 +1025,10 @@ public void testStringTermsNullValue() throws IOException { } public void testLongTerms() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.LONG) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("longField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.LONG) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("longfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("longfield.terms." + RollupField.COUNT_FIELD)); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java index 30e87ea5f6b05..0119ae5febd88 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java @@ -46,7 +46,7 @@ public class GeoLineAggregationBuilder public static final ObjectParser PARSER = ObjectParser.fromBuilder(NAME, GeoLineAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, ValueType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); MultiValuesSourceParseHelper.declareField(POINT_FIELD.getPreferredName(), PARSER, true, false, false); MultiValuesSourceParseHelper.declareField(SORT_FIELD.getPreferredName(), PARSER, true, false, false); PARSER.declareString((builder, order) -> builder.sortOrder(SortOrder.fromString(order)), ORDER_FIELD); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java index cacb06ff14e80..e816df8654637 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java @@ -39,7 +39,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { // TODO (support scripts) throw new UnsupportedOperationException("geo_shape"); } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java index 09be0407dd1a4..de3cfa96017b1 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java @@ -6,6 +6,7 @@ package org.elasticsearch.xpack.sql.querydsl.agg; import org.elasticsearch.search.aggregations.bucket.composite.CompositeValuesSourceBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.xpack.ql.expression.gen.script.ScriptTemplate; import org.elasticsearch.xpack.ql.querydsl.container.Sort.Direction; @@ -42,21 +43,21 @@ public final CompositeValuesSourceBuilder asValueSource() { if (script != null) { builder.script(script.toPainless()); if (script.outputType().isInteger()) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (script.outputType().isRational()) { - builder.userValuetypeHint(ValueType.DOUBLE); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (DataTypes.isString(script.outputType())) { - builder.userValuetypeHint(ValueType.STRING); + builder.userValuetypeHint(CoreValuesSourceType.BYTES); } else if (script.outputType() == DATE) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.DATE); } else if (script.outputType() == TIME) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (script.outputType() == DATETIME) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (script.outputType() == BOOLEAN) { - builder.userValuetypeHint(ValueType.BOOLEAN); + builder.userValuetypeHint(CoreValuesSourceType.BOOLEAN); } else if (script.outputType() == IP) { - builder.userValuetypeHint(ValueType.IP); + builder.userValuetypeHint(CoreValuesSourceType.IP); } } // field based From aa330efa035f892346afd4e1610c29f6d5cb3541 Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Fri, 4 Dec 2020 12:05:28 -0300 Subject: [PATCH 4/7] =?UTF-8?q?A=20refactor=20based=20on=20characteristics?= =?UTF-8?q?=20of=20=E2=80=9Cgood=E2=80=9D=20programming=20practices=20of?= =?UTF-8?q?=20SOLID=20principles=20trying=20to=20reduce=20maintenance=20an?= =?UTF-8?q?d=20modification=20costs=20by=20improving=20understandability,?= =?UTF-8?q?=20reliability,=20reusability=20and=20robustness.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elasticsearch/ElasticsearchException.java | 258 +++++++++++++----- 1 file changed, 190 insertions(+), 68 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/ElasticsearchException.java b/server/src/main/java/org/elasticsearch/ElasticsearchException.java index b8a04cccdf13b..c24c3e9c5958e 100644 --- a/server/src/main/java/org/elasticsearch/ElasticsearchException.java +++ b/server/src/main/java/org/elasticsearch/ElasticsearchException.java @@ -419,81 +419,44 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo List suppressed = new ArrayList<>(); for (; token == XContentParser.Token.FIELD_NAME; token = parser.nextToken()) { - String currentFieldName = parser.currentName(); - token = parser.nextToken(); - - if (token.isValue()) { - if (TYPE.equals(currentFieldName)) { - type = parser.text(); - } else if (REASON.equals(currentFieldName)) { - reason = parser.text(); - } else if (STACK_TRACE.equals(currentFieldName)) { - stack = parser.text(); - } else if (token == XContentParser.Token.VALUE_STRING) { - metadata.put(currentFieldName, Collections.singletonList(parser.text())); + parser.nextToken(); + + if(isType(parser)){ + type = getTypeFromXContent(parser); + } else if (isReason(parser)){ + reason = getReasonFromXContent(parser); + } else if (isStack(parser)) { + stack = getStackFromXContent(parser); + } else if(hasMetadata(parser)){ + getMetadataFromXContent(parser,metadata,parseRootCauses); + } else if(hasCause(parser)){ + cause = getCauseFromXContent(parser); + } else if(isStartObjectToken(parser)){ + getHeadersFromXContent(parser, headers); + } else if(isStartArray(parser)){ + if(parseRootCauses && isRootCause(parser)){ + getRootCausesFromXContent(parser, rootCauses, parseRootCauses); + } else if(isSupressed(parser)){ + getSuppressedFromXContent(parser, suppressed); } - } else if (token == XContentParser.Token.START_OBJECT) { - if (CAUSED_BY.equals(currentFieldName)) { - cause = fromXContent(parser); - } else if (HEADER.equals(currentFieldName)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else { - List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); - if (token == XContentParser.Token.VALUE_STRING) { - values.add(parser.text()); - } else if (token == XContentParser.Token.START_ARRAY) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - if (token == XContentParser.Token.VALUE_STRING) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - } else if (token == XContentParser.Token.START_OBJECT) { - parser.skipChildren(); - } - headers.put(currentFieldName, values); - } - } - } else { - // Any additional metadata object added by the metadataToXContent method is ignored - // and skipped, so that the parser does not fail on unknown fields. The parser only - // support metadata key-pairs and metadata arrays of values. - parser.skipChildren(); - } - } else if (token == XContentParser.Token.START_ARRAY) { - if (parseRootCauses && ROOT_CAUSE.equals(currentFieldName)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - rootCauses.add(fromXContent(parser)); - } - } else if (SUPPRESSED.match(currentFieldName, parser.getDeprecationHandler())) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - suppressed.add(fromXContent(parser)); - } - } else { + else { // Parse the array and add each item to the corresponding list of metadata. // Arrays of objects are not supported yet and just ignored and skipped. - List values = new ArrayList<>(); - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - if (token == XContentParser.Token.VALUE_STRING) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - if (values.size() > 0) { - if (metadata.containsKey(currentFieldName)) { - values.addAll(metadata.get(currentFieldName)); - } - metadata.put(currentFieldName, values); - } + addMetadataFromArray(parser, metadata); } } } ElasticsearchException e = new ElasticsearchException(buildMessage(type, reason, stack), cause); + + addMetadata(e,metadata); + addHeader(e,headers); + addSuppressed(e, rootCauses, suppressed); + return e; + } + + private static void addMetadata(ElasticsearchException e, Map> metadata){ + for (Map.Entry> entry : metadata.entrySet()) { //subclasses can print out additional metadata through the metadataToXContent method. Simple key-value pairs will be //parsed back and become part of this metadata set, while objects and arrays are not supported when parsing back. @@ -503,10 +466,16 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo //TODO rename metadataToXContent and have only SearchPhaseExecutionException use it, which prints out complex objects e.addMetadata("es." + entry.getKey(), entry.getValue()); } + } + + private static void addHeader(ElasticsearchException e, Map> headers){ + for (Map.Entry> header : headers.entrySet()) { e.addHeader(header.getKey(), header.getValue()); } + } + private static void addSuppressed(ElasticsearchException e, List rootCauses, List suppressed){ // Adds root causes as suppressed exception. This way they are not lost // after parsing and can be retrieved using getSuppressed() method. for (ElasticsearchException rootCause : rootCauses) { @@ -515,7 +484,160 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo for (ElasticsearchException s : suppressed) { e.addSuppressed(s); } - return e; + } + + private static String getTypeFromXContent(XContentParser parser) throws IOException { + if (isType(parser)) { + return parser.text(); + } + return null; + } + + private static boolean isType(XContentParser parser) throws IOException { + return parser.currentToken().isValue() && TYPE.equals(parser.currentName()); + } + + private static String getReasonFromXContent(XContentParser parser) throws IOException { + if (isReason(parser)) { + return parser.text(); + } + return null; + } + + private static boolean isReason(XContentParser parser) throws IOException{ + return parser.currentToken().isValue() && REASON.equals(parser.currentName()); + } + + private static String getStackFromXContent(XContentParser parser) throws IOException { + if (isStack(parser)) { + return parser.text(); + } + return null; + } + + private static boolean isStack(XContentParser parser) throws IOException { + return parser.currentToken().isValue() && STACK_TRACE.equals(parser.currentName()); + } + + private static void getMetadataFromXContent(XContentParser parser, Map> metadata, boolean parseRootCauses) throws IOException { + if (isValueString(parser)) { + metadata.put(parser.currentName(), Collections.singletonList(parser.text())); + } else if (isStartArray(parser) && !(parseRootCauses && isRootCause(parser) || isSupressed(parser))) { + addMetadataFromArray(parser, metadata); + } + } + + private static boolean isValueString(XContentParser parser){ + return parser.currentToken().isValue() && parser.currentToken() == XContentParser.Token.VALUE_STRING; + } + + private static boolean isStartArray(XContentParser parser){ + return parser.currentToken() == XContentParser.Token.START_ARRAY; + } + + private static boolean isRootCause(XContentParser parser) throws IOException { + return ROOT_CAUSE.equals(parser.currentName()); + } + + private static boolean isSupressed(XContentParser parser) throws IOException { + return SUPPRESSED.match(parser.currentName(), parser.getDeprecationHandler()); + } + + private static boolean hasMetadata(XContentParser parser) throws IOException { + return isValueString(parser) || (isStartArray(parser) && !(isRootCause(parser) || isSupressed(parser))); + } + + /** + * Parse the array and add each item to the corresponding list of metadata. + * Arrays of objects are not supported yet and just ignored and skipped. + */ + private static void addMetadataFromArray(XContentParser parser, Map> metadata) throws IOException { + List values = new ArrayList<>(); + + while (parser.nextToken() != XContentParser.Token.END_ARRAY) { + if (isValueString(parser)) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + if (values.size() > 0) { + if (metadata.containsKey(parser.currentName())) { + values.addAll(metadata.get(parser.currentName())); + } + metadata.put(parser.currentName(), values); + } + } + + private static ElasticsearchException getCauseFromXContent(XContentParser parser) throws IOException { + if (hasCause(parser)) { + return fromXContent(parser); + } + return null; + } + + private static boolean hasCause(XContentParser parser) throws IOException { + return parser.currentToken() == XContentParser.Token.START_OBJECT && CAUSED_BY.equals(parser.currentName()); + } + + private static void getHeadersFromXContent(XContentParser parser, Map> headers) throws IOException { + XContentParser.Token token = parser.currentToken(); + String currentFieldName = parser.currentName(); + + if (isStartObjectToken(parser)) { + if (hasHeader(parser)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { + if (token == XContentParser.Token.FIELD_NAME) { + currentFieldName = parser.currentName(); + } else { + List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); + if (isValueString(parser)) { + values.add(parser.text()); + } else if (isStartArray(parser)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + if (isValueString(parser)) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + } else if (isStartObjectToken(parser)) { + parser.skipChildren(); + } + headers.put(currentFieldName, values); + } + } + } else { + // Any additional metadata object added by the metadataToXContent method is ignored + // and skipped, so that the parser does not fail on unknown fields. The parser only + // support metadata key-pairs and metadata arrays of values. + parser.skipChildren(); + } + } + } + + private static boolean isStartObjectToken(XContentParser parser){ + return parser.currentToken() == XContentParser.Token.START_OBJECT; + } + + private static boolean hasHeader(XContentParser parser) throws IOException { + return HEADER.equals(parser.currentName()); + } + + private static void getRootCausesFromXContent(XContentParser parser, List rootCauses, boolean parseRootCauses) throws IOException { + if (isStartArray(parser) && parseRootCauses && isRootCause(parser)) { + while (parser.nextToken() != XContentParser.Token.END_ARRAY) { + rootCauses.add(fromXContent(parser)); + } + } + } + + private static void getSuppressedFromXContent(XContentParser parser, List suppressed) throws IOException { + if (isSupressed(parser)) { + while (parser.nextToken() != XContentParser.Token.END_ARRAY) { + suppressed.add(fromXContent(parser)); + } + } } /** From bf6160d770a2699985b6ead9d24b20ff022038aa Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Sat, 5 Dec 2020 17:58:02 -0300 Subject: [PATCH 5/7] =?UTF-8?q?Revert=20"A=20refactor=20based=20on=20chara?= =?UTF-8?q?cteristics=20of=20=E2=80=9Cgood=E2=80=9D=20programming=20practi?= =?UTF-8?q?ces=20of=20SOLID=20principles=20trying=20to=20reduce=20maintena?= =?UTF-8?q?nce=20and=20modification=20costs=20by=20improving=20understanda?= =?UTF-8?q?bility,=20reliability,=20reusability=20and=20robustness."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 90fb919c --- .../elasticsearch/ElasticsearchException.java | 258 +++++------------- 1 file changed, 68 insertions(+), 190 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/ElasticsearchException.java b/server/src/main/java/org/elasticsearch/ElasticsearchException.java index c24c3e9c5958e..b8a04cccdf13b 100644 --- a/server/src/main/java/org/elasticsearch/ElasticsearchException.java +++ b/server/src/main/java/org/elasticsearch/ElasticsearchException.java @@ -419,44 +419,81 @@ public static ElasticsearchException innerFromXContent(XContentParser parser, bo List suppressed = new ArrayList<>(); for (; token == XContentParser.Token.FIELD_NAME; token = parser.nextToken()) { - parser.nextToken(); - - if(isType(parser)){ - type = getTypeFromXContent(parser); - } else if (isReason(parser)){ - reason = getReasonFromXContent(parser); - } else if (isStack(parser)) { - stack = getStackFromXContent(parser); - } else if(hasMetadata(parser)){ - getMetadataFromXContent(parser,metadata,parseRootCauses); - } else if(hasCause(parser)){ - cause = getCauseFromXContent(parser); - } else if(isStartObjectToken(parser)){ - getHeadersFromXContent(parser, headers); - } else if(isStartArray(parser)){ - if(parseRootCauses && isRootCause(parser)){ - getRootCausesFromXContent(parser, rootCauses, parseRootCauses); - } else if(isSupressed(parser)){ - getSuppressedFromXContent(parser, suppressed); + String currentFieldName = parser.currentName(); + token = parser.nextToken(); + + if (token.isValue()) { + if (TYPE.equals(currentFieldName)) { + type = parser.text(); + } else if (REASON.equals(currentFieldName)) { + reason = parser.text(); + } else if (STACK_TRACE.equals(currentFieldName)) { + stack = parser.text(); + } else if (token == XContentParser.Token.VALUE_STRING) { + metadata.put(currentFieldName, Collections.singletonList(parser.text())); } - else { + } else if (token == XContentParser.Token.START_OBJECT) { + if (CAUSED_BY.equals(currentFieldName)) { + cause = fromXContent(parser); + } else if (HEADER.equals(currentFieldName)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { + if (token == XContentParser.Token.FIELD_NAME) { + currentFieldName = parser.currentName(); + } else { + List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); + if (token == XContentParser.Token.VALUE_STRING) { + values.add(parser.text()); + } else if (token == XContentParser.Token.START_ARRAY) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + if (token == XContentParser.Token.VALUE_STRING) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + } else if (token == XContentParser.Token.START_OBJECT) { + parser.skipChildren(); + } + headers.put(currentFieldName, values); + } + } + } else { + // Any additional metadata object added by the metadataToXContent method is ignored + // and skipped, so that the parser does not fail on unknown fields. The parser only + // support metadata key-pairs and metadata arrays of values. + parser.skipChildren(); + } + } else if (token == XContentParser.Token.START_ARRAY) { + if (parseRootCauses && ROOT_CAUSE.equals(currentFieldName)) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + rootCauses.add(fromXContent(parser)); + } + } else if (SUPPRESSED.match(currentFieldName, parser.getDeprecationHandler())) { + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + suppressed.add(fromXContent(parser)); + } + } else { // Parse the array and add each item to the corresponding list of metadata. // Arrays of objects are not supported yet and just ignored and skipped. - addMetadataFromArray(parser, metadata); + List values = new ArrayList<>(); + while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { + if (token == XContentParser.Token.VALUE_STRING) { + values.add(parser.text()); + } else { + parser.skipChildren(); + } + } + if (values.size() > 0) { + if (metadata.containsKey(currentFieldName)) { + values.addAll(metadata.get(currentFieldName)); + } + metadata.put(currentFieldName, values); + } } } } ElasticsearchException e = new ElasticsearchException(buildMessage(type, reason, stack), cause); - - addMetadata(e,metadata); - addHeader(e,headers); - addSuppressed(e, rootCauses, suppressed); - return e; - } - - private static void addMetadata(ElasticsearchException e, Map> metadata){ - for (Map.Entry> entry : metadata.entrySet()) { //subclasses can print out additional metadata through the metadataToXContent method. Simple key-value pairs will be //parsed back and become part of this metadata set, while objects and arrays are not supported when parsing back. @@ -466,16 +503,10 @@ private static void addMetadata(ElasticsearchException e, Map> headers){ - for (Map.Entry> header : headers.entrySet()) { e.addHeader(header.getKey(), header.getValue()); } - } - private static void addSuppressed(ElasticsearchException e, List rootCauses, List suppressed){ // Adds root causes as suppressed exception. This way they are not lost // after parsing and can be retrieved using getSuppressed() method. for (ElasticsearchException rootCause : rootCauses) { @@ -484,160 +515,7 @@ private static void addSuppressed(ElasticsearchException e, List> metadata, boolean parseRootCauses) throws IOException { - if (isValueString(parser)) { - metadata.put(parser.currentName(), Collections.singletonList(parser.text())); - } else if (isStartArray(parser) && !(parseRootCauses && isRootCause(parser) || isSupressed(parser))) { - addMetadataFromArray(parser, metadata); - } - } - - private static boolean isValueString(XContentParser parser){ - return parser.currentToken().isValue() && parser.currentToken() == XContentParser.Token.VALUE_STRING; - } - - private static boolean isStartArray(XContentParser parser){ - return parser.currentToken() == XContentParser.Token.START_ARRAY; - } - - private static boolean isRootCause(XContentParser parser) throws IOException { - return ROOT_CAUSE.equals(parser.currentName()); - } - - private static boolean isSupressed(XContentParser parser) throws IOException { - return SUPPRESSED.match(parser.currentName(), parser.getDeprecationHandler()); - } - - private static boolean hasMetadata(XContentParser parser) throws IOException { - return isValueString(parser) || (isStartArray(parser) && !(isRootCause(parser) || isSupressed(parser))); - } - - /** - * Parse the array and add each item to the corresponding list of metadata. - * Arrays of objects are not supported yet and just ignored and skipped. - */ - private static void addMetadataFromArray(XContentParser parser, Map> metadata) throws IOException { - List values = new ArrayList<>(); - - while (parser.nextToken() != XContentParser.Token.END_ARRAY) { - if (isValueString(parser)) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - if (values.size() > 0) { - if (metadata.containsKey(parser.currentName())) { - values.addAll(metadata.get(parser.currentName())); - } - metadata.put(parser.currentName(), values); - } - } - - private static ElasticsearchException getCauseFromXContent(XContentParser parser) throws IOException { - if (hasCause(parser)) { - return fromXContent(parser); - } - return null; - } - - private static boolean hasCause(XContentParser parser) throws IOException { - return parser.currentToken() == XContentParser.Token.START_OBJECT && CAUSED_BY.equals(parser.currentName()); - } - - private static void getHeadersFromXContent(XContentParser parser, Map> headers) throws IOException { - XContentParser.Token token = parser.currentToken(); - String currentFieldName = parser.currentName(); - - if (isStartObjectToken(parser)) { - if (hasHeader(parser)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else { - List values = headers.getOrDefault(currentFieldName, new ArrayList<>()); - if (isValueString(parser)) { - values.add(parser.text()); - } else if (isStartArray(parser)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - if (isValueString(parser)) { - values.add(parser.text()); - } else { - parser.skipChildren(); - } - } - } else if (isStartObjectToken(parser)) { - parser.skipChildren(); - } - headers.put(currentFieldName, values); - } - } - } else { - // Any additional metadata object added by the metadataToXContent method is ignored - // and skipped, so that the parser does not fail on unknown fields. The parser only - // support metadata key-pairs and metadata arrays of values. - parser.skipChildren(); - } - } - } - - private static boolean isStartObjectToken(XContentParser parser){ - return parser.currentToken() == XContentParser.Token.START_OBJECT; - } - - private static boolean hasHeader(XContentParser parser) throws IOException { - return HEADER.equals(parser.currentName()); - } - - private static void getRootCausesFromXContent(XContentParser parser, List rootCauses, boolean parseRootCauses) throws IOException { - if (isStartArray(parser) && parseRootCauses && isRootCause(parser)) { - while (parser.nextToken() != XContentParser.Token.END_ARRAY) { - rootCauses.add(fromXContent(parser)); - } - } - } - - private static void getSuppressedFromXContent(XContentParser parser, List suppressed) throws IOException { - if (isSupressed(parser)) { - while (parser.nextToken() != XContentParser.Token.END_ARRAY) { - suppressed.add(fromXContent(parser)); - } - } + return e; } /** From a4f1f172487e66549e768b21f98c20286a16d1c4 Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Sun, 6 Dec 2020 02:57:33 -0300 Subject: [PATCH 6/7] Parse user type hints directly to ValuesSourceTypes --- .../client/RequestConvertersTests.java | 3 +- .../org/elasticsearch/client/SearchIT.java | 19 ++--- .../ArrayValuesSourceAggregationBuilder.java | 15 ++-- .../org/elasticsearch/search/CCSDuelIT.java | 19 ++--- .../action/search/TransportSearchIT.java | 3 +- .../bucket/terms/StringTermsIT.java | 3 +- .../CompositeValuesSourceBuilder.java | 20 ++--- .../CompositeValuesSourceParserHelper.java | 4 +- .../WeightedAvgAggregationBuilder.java | 3 +- .../support/CoreValuesSourceType.java | 14 ++-- .../MultiValuesSourceAggregationBuilder.java | 19 +++-- .../support/MultiValuesSourceParseHelper.java | 6 +- .../aggregations/support/ValueType.java | 6 +- .../aggregations/support/ValuesSource.java | 6 +- .../ValuesSourceAggregationBuilder.java | 17 ++-- .../support/ValuesSourceConfig.java | 42 +++++----- .../support/ValuesSourceType.java | 2 +- .../search/SearchServiceTests.java | 9 ++- .../aggregations/bucket/FiltersTests.java | 3 +- .../composite/CompositeAggregatorTests.java | 5 +- .../bucket/nested/NestedAggregatorTests.java | 13 ++-- .../terms/BinaryTermsAggregatorTests.java | 10 ++- .../terms/KeywordTermsAggregatorTests.java | 8 +- .../terms/NumericTermsAggregatorTests.java | 10 ++- .../bucket/terms/TermsAggregatorTests.java | 77 ++++++++++--------- .../metrics/AvgAggregatorTests.java | 3 +- .../metrics/MaxAggregatorTests.java | 4 +- .../metrics/ValueCountAggregatorTests.java | 2 +- .../WeightedAvgAggregationBuilderTests.java | 2 + .../aggregations/pipeline/AvgBucketTests.java | 3 +- .../pipeline/BucketScriptAggregatorTests.java | 3 +- .../pipeline/ExtendedStatsBucketTests.java | 3 +- .../aggregations/pipeline/MaxBucketTests.java | 3 +- .../aggregations/pipeline/MinBucketTests.java | 3 +- .../pipeline/PercentilesBucketTests.java | 3 +- .../pipeline/StatsBucketTests.java | 3 +- .../aggregations/pipeline/SumBucketTests.java | 3 +- .../support/ValuesSourceConfigTests.java | 14 ++-- .../support/AnalyticsValuesSourceType.java | 3 +- .../ttest/TTestAggregationBuilder.java | 2 +- .../StringStatsAggregatorTests.java | 4 +- .../AggregateMetricsValuesSourceType.java | 3 +- .../rollup/RollupJobIdentifierUtilTests.java | 3 +- .../rollup/RollupRequestTranslationTests.java | 3 +- .../RollupResponseTranslationTests.java | 17 ++-- .../GeoLineAggregationBuilder.java | 2 +- .../support/GeoShapeValuesSourceType.java | 2 +- .../xpack/sql/querydsl/agg/GroupByKey.java | 17 ++-- 48 files changed, 232 insertions(+), 209 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index c0b6b93c4544f..b1f723b43543b 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -92,6 +92,7 @@ import org.elasticsearch.script.mustache.SearchTemplateRequest; import org.elasticsearch.search.Scroll; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; @@ -1079,7 +1080,7 @@ public static SearchSourceBuilder createTestSearchSourceBuilder() { } if (randomBoolean()) { searchSourceBuilder.aggregation(new TermsAggregationBuilder(randomAlphaOfLengthBetween(3, 10)) - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field(randomAlphaOfLengthBetween(3, 10))); } if (randomBoolean()) { diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java index 70ccf7984863c..76799ee11ea35 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java @@ -75,6 +75,7 @@ import org.elasticsearch.search.aggregations.matrix.stats.MatrixStatsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.WeightedAvg; import org.elasticsearch.search.aggregations.metrics.WeightedAvgAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; @@ -260,7 +261,7 @@ public void testSearchMatchQuery() throws IOException { public void testSearchWithTermsAgg() throws IOException { SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING) + searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES) .field("type.keyword")); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); @@ -284,7 +285,7 @@ public void testSearchWithTermsAgg() throws IOException { public void testSearchWithRareTermsAgg() throws IOException { SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - searchSourceBuilder.aggregation(new RareTermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING) + searchSourceBuilder.aggregation(new RareTermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES) .field("type.keyword").maxDocCount(2)); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); @@ -373,7 +374,7 @@ public void testSearchWithRangeAgg() throws IOException { public void testSearchWithTermsAndRangeAgg() throws IOException { SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING).field("type.keyword"); + TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES).field("type.keyword"); agg.subAggregation(new RangeAggregationBuilder("subagg").field("num") .addRange("first", 0, 30).addRange("second", 31, 200)); searchSourceBuilder.aggregation(agg); @@ -427,7 +428,7 @@ public void testSearchWithTermsAndRangeAgg() throws IOException { public void testSearchWithTermsAndWeightedAvg() throws IOException { SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(ValueType.STRING).field("type.keyword"); + TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES).field("type.keyword"); agg.subAggregation(new WeightedAvgAggregationBuilder("subagg") .value(new MultiValuesSourceFieldConfig.Builder().setFieldName("num").build()) .weight(new MultiValuesSourceFieldConfig.Builder().setFieldName("num2").build()) @@ -554,10 +555,10 @@ public void testSearchWithParentJoin() throws IOException { client().performRequest(new Request(HttpPost.METHOD_NAME, "/_refresh")); TermsAggregationBuilder leafTermAgg = new TermsAggregationBuilder("top-names") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field("owner.display_name.keyword").size(10); ChildrenAggregationBuilder childrenAgg = new ChildrenAggregationBuilder("to-answers", "answer").subAggregation(leafTermAgg); - TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(CoreValuesSourceType.BYTES) .field("tags.keyword") .size(10).subAggregation(childrenAgg); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); @@ -770,17 +771,17 @@ public void testMultiSearch() throws Exception { public void testMultiSearch_withAgg() throws Exception { MultiSearchRequest multiSearchRequest = new MultiSearchRequest(); SearchRequest searchRequest1 = new SearchRequest("index1"); - searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING) + searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest1); SearchRequest searchRequest2 = new SearchRequest("index2"); - searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING) + searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest2); SearchRequest searchRequest3 = new SearchRequest("index3"); - searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(ValueType.STRING) + searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest3); diff --git a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java index 7d965291c24aa..c20956d4a4851 100644 --- a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java +++ b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java @@ -29,12 +29,7 @@ import org.elasticsearch.search.aggregations.AggregatorFactory; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; public abstract class ArrayValuesSourceAggregationBuilder> extends AbstractAggregationBuilder { @@ -79,7 +74,7 @@ public final BucketCardinality bucketCardinality() { /* The parser doesn't support setting userValueTypeHint (aka valueType), but we do serialize and deserialize it, so keeping it around for now so as to not break BWC. Future refactors should feel free to remove this field. --Tozzi 2020-01-16 */ - private ValueType userValueTypeHint = null; + private ValuesSourceType userValueTypeHint = null; private String format = null; private Object missing = null; private Map missingMap = Collections.emptyMap(); @@ -110,7 +105,7 @@ protected ArrayValuesSourceAggregationBuilder(StreamInput in) @SuppressWarnings("unchecked") private void read(StreamInput in) throws IOException { fields = (ArrayList)in.readGenericValue(); - userValueTypeHint = in.readOptionalWriteable(ValueType::readFromStream); + userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); format = in.readOptionalString(); missingMap = in.readMap(); } @@ -118,7 +113,7 @@ private void read(StreamInput in) throws IOException { @Override protected final void doWriteTo(StreamOutput out) throws IOException { out.writeGenericValue(fields); - out.writeOptionalWriteable(userValueTypeHint); + out.writeString(userValueTypeHint.typeName().toUpperCase(Locale.ROOT)); out.writeOptionalString(format); out.writeMap(missingMap); innerWriteTo(out); @@ -225,7 +220,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field(CommonFields.FORMAT.getPreferredName(), format); } if (userValueTypeHint != null) { - builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.getPreferredName()); + builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java b/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java index 55a762ada4815..3e99e25fb63ce 100644 --- a/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java +++ b/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java @@ -69,6 +69,7 @@ import org.elasticsearch.search.aggregations.metrics.TopHitsAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.DerivativePipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.MaxBucketPipelineAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; @@ -529,32 +530,32 @@ public void testTermsAggsWithProfile() throws Exception { private static SearchSourceBuilder buildTermsAggsSource() { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); - TermsAggregationBuilder cluster = new TermsAggregationBuilder("cluster123").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder cluster = new TermsAggregationBuilder("cluster123").userValueTypeHint(CoreValuesSourceType.BYTES); cluster.field("_index"); - TermsAggregationBuilder type = new TermsAggregationBuilder("type").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder type = new TermsAggregationBuilder("type").userValueTypeHint(CoreValuesSourceType.BYTES); type.field("type.keyword"); type.showTermDocCountError(true); type.order(BucketOrder.key(true)); cluster.subAggregation(type); sourceBuilder.aggregation(cluster); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); tags.showTermDocCountError(true); tags.size(100); sourceBuilder.aggregation(tags); - TermsAggregationBuilder tags2 = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags2 = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags2.field("tags.keyword"); tags.subAggregation(tags2); FilterAggregationBuilder answers = new FilterAggregationBuilder("answers", new TermQueryBuilder("type", "answer")); TermsAggregationBuilder answerPerQuestion = new TermsAggregationBuilder("answer_per_question") - .userValueTypeHint(ValueType.STRING); + .userValueTypeHint(CoreValuesSourceType.BYTES); answerPerQuestion.showTermDocCountError(true); answerPerQuestion.field("questionId.keyword"); answers.subAggregation(answerPerQuestion); - TermsAggregationBuilder answerPerUser = new TermsAggregationBuilder("answer_per_user").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder answerPerUser = new TermsAggregationBuilder("answer_per_user").userValueTypeHint(CoreValuesSourceType.BYTES); answerPerUser.field("user.keyword"); answerPerUser.size(30); answerPerUser.showTermDocCountError(true); @@ -569,7 +570,7 @@ public void testDateHistogram() throws Exception { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); searchRequest.source(sourceBuilder); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); tags.showTermDocCountError(true); DateHistogramAggregationBuilder creation = new DateHistogramAggregationBuilder("creation"); @@ -586,7 +587,7 @@ public void testCardinalityAgg() throws Exception { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); searchRequest.source(sourceBuilder); - CardinalityAggregationBuilder tags = new CardinalityAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + CardinalityAggregationBuilder tags = new CardinalityAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); sourceBuilder.aggregation(tags); duelSearch(searchRequest, CCSDuelIT::assertAggs); @@ -625,7 +626,7 @@ public void testTopHits() throws Exception { topHits.size(10); topHits.sort("creationDate", SortOrder.DESC); topHits.sort("id", SortOrder.ASC); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); tags.field("tags.keyword"); tags.size(10); tags.subAggregation(topHits); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java b/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java index 2b6a5640179ac..ed25de44ac84c 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java @@ -63,6 +63,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.InternalMax; import org.elasticsearch.search.aggregations.support.AggregationContext; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.FetchSubPhase; @@ -237,7 +238,7 @@ public void testFinalReduce() { SearchSourceBuilder source = new SearchSourceBuilder(); source.size(0); originalRequest.source(source); - TermsAggregationBuilder terms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.NUMERIC); + TermsAggregationBuilder terms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC); terms.field("price"); terms.size(1); source.aggregation(terms); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java b/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java index cc1d284a29217..2507dcd066789 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java @@ -44,6 +44,7 @@ import org.elasticsearch.search.aggregations.metrics.ExtendedStats; import org.elasticsearch.search.aggregations.metrics.Stats; import org.elasticsearch.search.aggregations.metrics.Sum; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.test.ESIntegTestCase; @@ -1189,7 +1190,7 @@ public void testScriptWithValueType() throws Exception { .size(0) .aggregation(terms("terms") .script(new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "42", Collections.emptyMap())) - .userValueTypeHint(randomFrom(ValueType.NUMERIC, ValueType.NUMBER))); + .userValueTypeHint(randomFrom(CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC))); String source = builder.toString(); try (XContentParser parser = createParser(JsonXContent.jsonXContent, source)) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java index a9137473ba814..b66cbe579f6ed 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java @@ -25,16 +25,12 @@ import org.elasticsearch.common.xcontent.ToXContentFragment; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.script.Script; -import org.elasticsearch.search.aggregations.support.AggregationContext; -import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; -import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; +import org.elasticsearch.search.aggregations.support.*; import org.elasticsearch.search.sort.SortOrder; import java.io.IOException; import java.time.ZoneId; +import java.util.Locale; import java.util.Objects; /** @@ -45,7 +41,7 @@ public abstract class CompositeValuesSourceBuilder, T> void declareValuesSource objectParser.declareBoolean(VB::missingBucket, new ParseField("missing_bucket")); objectParser.declareField(VB::userValuetypeHint, p -> { - ValueType valueType = ValueType.lenientParse(p.text()); + ValuesSourceType valueType = CoreValuesSourceType.fromString(p.text()); return valueType; }, new ParseField("value_type"), ObjectParser.ValueType.STRING); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java index d0e12b609a707..753412180a8c8 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java @@ -36,7 +36,6 @@ import org.elasticsearch.search.aggregations.support.MultiValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.search.aggregations.support.MultiValuesSourceParseHelper; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -53,7 +52,7 @@ public class WeightedAvgAggregationBuilder extends MultiValuesSourceAggregationB public static final ObjectParser PARSER = ObjectParser.fromBuilder(NAME, WeightedAvgAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, ValueType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); MultiValuesSourceParseHelper.declareField(VALUE_FIELD.getPreferredName(), PARSER, true, false, false); MultiValuesSourceParseHelper.declareField(WEIGHT_FIELD.getPreferredName(), PARSER, true, false, false); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java index 8858a3db3696c..2ace3519478bf 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java @@ -62,7 +62,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return new ValuesSource.Numeric.Script(script, scriptValueType); } @@ -112,7 +112,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return new ValuesSource.Bytes.Script(script); } @@ -150,7 +150,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } @@ -184,7 +184,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } @@ -212,7 +212,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return BYTES.getScript(script, scriptValueType); } @@ -239,7 +239,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return NUMERIC.getScript(script, scriptValueType); } @@ -354,7 +354,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { return NUMERIC.getScript(script, scriptValueType); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java index cb40444de1678..b48d9f7da53f9 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java @@ -21,6 +21,7 @@ import org.elasticsearch.common.Nullable; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.DocValueFormat; @@ -31,6 +32,7 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -76,7 +78,7 @@ public AB subAggregations(Builder subFactories) { private Map fields = new HashMap<>(); - private ValueType userValueTypeHint = null; + private ValuesSourceType userValueTypeHint = null; private String format = null; protected MultiValuesSourceAggregationBuilder(String name) { @@ -107,14 +109,15 @@ protected MultiValuesSourceAggregationBuilder(StreamInput in) @SuppressWarnings("unchecked") private void read(StreamInput in) throws IOException { fields = in.readMap(StreamInput::readString, MultiValuesSourceFieldConfig::new); - userValueTypeHint = in.readOptionalWriteable(ValueType::readFromStream); + userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); format = in.readOptionalString(); } @Override protected final void doWriteTo(StreamOutput out) throws IOException { out.writeMap(fields, StreamOutput::writeString, (o, value) -> value.writeTo(o)); - out.writeOptionalWriteable(userValueTypeHint); + String type = userValueTypeHint.typeName(); + out.writeString(type.toUpperCase(Locale.ROOT)); out.writeOptionalString(format); innerWriteTo(out); } @@ -134,10 +137,10 @@ protected AB field(String propertyName, MultiValuesSourceFieldConfig config) { } /** - * Sets the {@link ValueType} for the value produced by this aggregation + * Sets the {@link ValuesSourceType} for the value produced by this aggregation */ @SuppressWarnings("unchecked") - public AB userValueTypeHint(ValueType valueType) { + public AB userValueTypeHint(ValuesSourceType valueType) { if (valueType == null) { throw new IllegalArgumentException("[userValueTypeHint] must not be null: [" + name + "]"); } @@ -182,13 +185,13 @@ protected final MultiValuesSourceAggregatorFactory doBuild(AggregationContext co } - private static DocValueFormat resolveFormat(@Nullable String format, @Nullable ValueType valueType, + private static DocValueFormat resolveFormat(@Nullable String format, @Nullable ValuesSourceType valueType, ValuesSourceType defaultValuesSourceType) { if (valueType == null) { // If the user didn't send a hint, all we can do is fall back to the default return defaultValuesSourceType.getFormatter(format, null); } - DocValueFormat valueFormat = valueType.defaultFormat; + DocValueFormat valueFormat = valueType.getFormatter(format, null); if (valueFormat instanceof DocValueFormat.Decimal && format != null) { valueFormat = new DocValueFormat.Decimal(format); } @@ -214,7 +217,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field(CommonFields.FORMAT.getPreferredName(), format); } if (userValueTypeHint != null) { - builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.getPreferredName()); + builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java index ac9cc06b07cdf..960ce3ccc5e34 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java @@ -29,11 +29,11 @@ public final class MultiValuesSourceParseHelper { public static void declareCommon( AbstractObjectParser, T> objectParser, boolean formattable, - ValueType expectedValueType) { + ValuesSourceType expectedValueType) { objectParser.declareField(MultiValuesSourceAggregationBuilder::userValueTypeHint, p -> { - ValueType valueType = ValueType.lenientParse(p.text()); - if (expectedValueType != null && valueType.isNotA(expectedValueType)) { + ValuesSourceType valueType = CoreValuesSourceType.fromString(p.text()); + if (expectedValueType != null && !valueType.equals(expectedValueType)) { throw new ParsingException(p.getTokenLocation(), "Aggregation [" + objectParser.getName() + "] was configured with an incompatible value type [" + valueType + "]. It can only work on value off type [" diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java index d8389ef9fd2e2..2497762090824 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValueType.java @@ -57,7 +57,7 @@ public enum ValueType implements Writeable { final ValuesSourceType valuesSourceType; final DocValueFormat defaultFormat; private final byte id; - private String preferredName; + private final String preferredName; public static final ParseField VALUE_TYPE = new ParseField("value_type", "valueType"); @@ -78,9 +78,9 @@ public ValuesSourceType getValuesSourceType() { return valuesSourceType; } - private static Set numericValueTypes = Set.of(ValueType.DOUBLE, ValueType.DATE, ValueType.LONG, ValueType.NUMBER, + private static final Set numericValueTypes = Set.of(ValueType.DOUBLE, ValueType.DATE, ValueType.LONG, ValueType.NUMBER, ValueType.NUMERIC, ValueType.BOOLEAN); - private static Set stringValueTypes = Set.of(ValueType.STRING, ValueType.IP); + private static final Set stringValueTypes = Set.of(ValueType.STRING, ValueType.IP); /** * This is a bit of a hack to mirror the old {@link ValueType} behavior, which would allow a rough compatibility between types. This diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java index 879d4a25441f0..bad4eaf6f0075 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java @@ -534,16 +534,16 @@ public SortedNumericDoubleValues doubleValues(LeafReaderContext context) { */ public static class Script extends Numeric { private final AggregationScript.LeafFactory script; - private final ValueType scriptValueType; + private final ValuesSourceType scriptValueType; - public Script(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public Script(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { this.script = script; this.scriptValueType = scriptValueType; } @Override public boolean isFloatingPoint() { - return scriptValueType != null ? scriptValueType == ValueType.DOUBLE : true; + return scriptValueType != null ? scriptValueType == CoreValuesSourceType.NUMERIC : true; } @Override diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java index 0bcf83be0237b..e64a47249e136 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java @@ -35,6 +35,7 @@ import java.io.IOException; import java.time.ZoneId; import java.time.ZoneOffset; +import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -60,7 +61,7 @@ public static void declareFields( ParseField.CommonFields.MISSING, ObjectParser.ValueType.VALUE); objectParser.declareField(ValuesSourceAggregationBuilder::userValueTypeHint, p -> { - ValueType type = ValueType.lenientParse(p.text()); + ValuesSourceType type = CoreValuesSourceType.fromString(p.text()); if (type == null) { throw new IllegalArgumentException("Unknown value type [" + p.text() + "]"); } @@ -135,7 +136,7 @@ public final BucketCardinality bucketCardinality() { private String field = null; private Script script = null; - private ValueType userValueTypeHint = null; + private ValuesSourceType userValueTypeHint = null; private String format = null; private Object missing = null; private ZoneId timeZone = null; @@ -179,7 +180,7 @@ private void read(StreamInput in) throws IOException { script = new Script(in); } if (in.readBoolean()) { - userValueTypeHint = ValueType.readFromStream(in); + this.userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); } format = in.readOptionalString(); missing = in.readGenericValue(); @@ -201,7 +202,7 @@ protected final void doWriteTo(StreamOutput out) throws IOException { boolean hasValueType = userValueTypeHint != null; out.writeBoolean(hasValueType); if (hasValueType) { - userValueTypeHint.writeTo(out); + out.writeString(userValueTypeHint.typeName().toUpperCase(Locale.ROOT)); } out.writeOptionalString(format); out.writeGenericValue(missing); @@ -267,11 +268,11 @@ public Script script() { * This setter should only be used during parsing, to set the userValueTypeHint. This is information the user provides in the json * query to indicate the output type of a script or the type of the 'missing' replacement value. * - * @param valueType - The parsed {@link ValueType} based on the string the user specified + * @param valueType - The parsed {@link ValuesSourceType} based on the string the user specified * @return - The modified builder instance, for chaining. */ @SuppressWarnings("unchecked") - public AB userValueTypeHint(ValueType valueType) { + public AB userValueTypeHint(ValuesSourceType valueType) { if (valueType == null) { // TODO: This is nonsense. We allow the value to be null (via constructor), but don't allow it to be set to null. This means // thing looking to copy settings (like RollupRequestTranslator) need to check if userValueTypeHint is not null, and then @@ -282,7 +283,7 @@ public AB userValueTypeHint(ValueType valueType) { return (AB) this; } - public ValueType userValueTypeHint() { + public ValuesSourceType userValueTypeHint() { return userValueTypeHint; } @@ -414,7 +415,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field("time_zone", timeZone.toString()); } if (userValueTypeHint != null) { - builder.field("value_type", userValueTypeHint.getPreferredName()); + builder.field("value_type", userValueTypeHint.typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java index bb4386360fc20..9e8e446ae21cc 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java @@ -55,7 +55,7 @@ public class ValuesSourceConfig { * @return - An initialized {@link ValuesSourceConfig} that will yield the appropriate {@link ValuesSourceType} */ public static ValuesSourceConfig resolve(AggregationContext context, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, String field, Script script, Object missing, @@ -85,7 +85,7 @@ public static ValuesSourceConfig resolve(AggregationContext context, * @return - An initialized {@link ValuesSourceConfig} that will yield the appropriate {@link ValuesSourceType} */ public static ValuesSourceConfig resolveUnregistered(AggregationContext context, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, String field, Script script, Object missing, @@ -105,24 +105,24 @@ public static ValuesSourceConfig resolveUnregistered(AggregationContext context, } private static ValuesSourceConfig internalResolve(AggregationContext context, - ValueType userValueTypeHint, - String field, - Script script, - Object missing, - ZoneId timeZone, - String format, - ValuesSourceType defaultValueSourceType, - FieldResolver fieldResolver + ValuesSourceType userValueTypeHint, + String field, + Script script, + Object missing, + ZoneId timeZone, + String format, + ValuesSourceType defaultValueSourceType, + FieldResolver fieldResolver ) { ValuesSourceConfig config; ValuesSourceType valuesSourceType = null; - ValueType scriptValueType = userValueTypeHint; + ValuesSourceType scriptValueType = userValueTypeHint; FieldContext fieldContext = null; AggregationScript.LeafFactory aggregationScript = createScript(script, context); // returns null if script is null boolean unmapped = false; if (userValueTypeHint != null) { // If the user gave us a type hint, respect that. - valuesSourceType = userValueTypeHint.getValuesSourceType(); + valuesSourceType = userValueTypeHint; } if (field == null) { if (script == null) { @@ -169,14 +169,14 @@ private static ValuesSourceConfig internalResolve(AggregationContext context, private interface FieldResolver { ValuesSourceType getValuesSourceType( FieldContext fieldContext, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, ValuesSourceType defaultValuesSourceType); } private static ValuesSourceType getMappingFromRegistry( FieldContext fieldContext, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, ValuesSourceType defaultValuesSourceType ) { return fieldContext.indexFieldData().getValuesSourceType(); @@ -184,7 +184,7 @@ private static ValuesSourceType getMappingFromRegistry( private static ValuesSourceType getLegacyMapping( FieldContext fieldContext, - ValueType userValueTypeHint, + ValuesSourceType userValueTypeHint, ValuesSourceType defaultValuesSourceType ) { IndexFieldData indexFieldData = fieldContext.indexFieldData(); @@ -198,7 +198,7 @@ private static ValuesSourceType getLegacyMapping( if (userValueTypeHint == null) { return defaultValuesSourceType; } else { - return userValueTypeHint.getValuesSourceType(); + return userValueTypeHint; } } } @@ -228,7 +228,7 @@ private static DocValueFormat resolveFormat(@Nullable String format, @Nullable V */ public static ValuesSourceConfig resolveFieldOnly(MappedFieldType fieldType, AggregationContext context) { FieldContext fieldContext = context.buildFieldContext(fieldType); - ValuesSourceType vstype = fieldContext.indexFieldData().getValuesSourceType(); + ValuesSourceType vstype = fieldContext.indexFieldData().getValuesSourceType(); return new ValuesSourceConfig(vstype, fieldContext, false, null, null, null, null, null, context); } @@ -242,7 +242,7 @@ public static ValuesSourceConfig resolveUnmapped(ValuesSourceType valuesSourceTy private final ValuesSourceType valuesSourceType; private final FieldContext fieldContext; private final AggregationScript.LeafFactory script; - private final ValueType scriptValueType; + private final ValuesSourceType scriptValueType; private final boolean unmapped; private final DocValueFormat format; private final Object missing; @@ -258,7 +258,7 @@ public ValuesSourceConfig( FieldContext fieldContext, boolean unmapped, AggregationScript.LeafFactory script, - ValueType scriptValueType, + ValuesSourceType scriptValueType, Object missing, ZoneId timeZone, DocValueFormat format, @@ -341,7 +341,7 @@ public boolean valid() { return fieldContext != null || script != null || unmapped; } - public ValueType scriptValueType() { + public ValuesSourceType scriptValueType() { return this.scriptValueType; } @@ -403,7 +403,7 @@ public boolean alignesWithSearchIndex() { */ public String getDescription() { if (script != null) { - return "Script yielding [" + (scriptValueType != null ? scriptValueType.getPreferredName() : "unknown type") + "]"; + return "Script yielding [" + (scriptValueType != null ? scriptValueType.typeName() : "unknown type") + "]"; } MappedFieldType fieldType = fieldType(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java index 9d86b700622ac..d0f7e1f4354f2 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java @@ -60,7 +60,7 @@ public interface ValuesSourceType { * @param scriptValueType - The expected output type of the script * @return - Script specialization of the base {@link ValuesSource} */ - ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType); + ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType); /** * Return a {@link ValuesSource} wrapping a field for the given type. All {@link ValuesSource}s must implement this method. diff --git a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java index 5a5df0e514052..5f81758efd064 100644 --- a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java +++ b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java @@ -76,6 +76,7 @@ import org.elasticsearch.search.aggregations.MultiBucketConsumerService; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.FetchSearchResult; @@ -715,7 +716,7 @@ public void testCanMatch() throws Exception { new AliasFilter(null, Strings.EMPTY_ARRAY), 1f, -1, null, null)).canMatch()); searchRequest.source(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(0))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(0))); assertTrue(service.canMatch(new ShardSearchRequest(OriginalIndices.NONE, searchRequest, indexShard.shardId(), 1, new AliasFilter(null, Strings.EMPTY_ARRAY), 1f, -1, null, null)).canMatch()); searchRequest.source(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) @@ -776,12 +777,12 @@ public void testCanRewriteToMatchNone() { assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder())); assertFalse(SearchService.canRewriteToMatchNone(null)); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(0)))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(0)))); assertTrue(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new TermQueryBuilder("foo", "bar")))); assertTrue(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(1)))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(1)))); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(ValueType.STRING).minDocCount(1)) + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(1)) .suggest(new SuggestBuilder()))); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new TermQueryBuilder("foo", "bar")) .suggest(new SuggestBuilder()))); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java index 0f93bf734b6ba..958706f36d6bd 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java @@ -34,6 +34,7 @@ import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; @@ -168,7 +169,7 @@ public void testRewrite() throws IOException { assertTrue(((FiltersAggregationBuilder) rewritten).isKeyed()); // test sub-agg filter that does rewrite - original = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.BOOLEAN) + original = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BOOLEAN) .subAggregation( new FiltersAggregationBuilder("my-agg", new KeyedFilter("my-filter", new BoolQueryBuilder())) ); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java index 60ccb9a4562fc..8e781a8be315f 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java @@ -72,6 +72,7 @@ import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.TopHits; import org.elasticsearch.search.aggregations.metrics.TopHitsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.test.IndexSettingsModule; @@ -1845,7 +1846,7 @@ public void testWithTermsSubAggExecutionMode() throws Exception { .field("keyword"); return new CompositeAggregationBuilder("name", Collections.singletonList(terms)) .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("terms") .collectMode(mode) .subAggregation(new MaxAggregationBuilder("max").field("long")) @@ -1873,7 +1874,7 @@ public void testWithTermsSubAggExecutionMode() throws Exception { .field("keyword"); return new CompositeAggregationBuilder("name", Collections.singletonList(terms)) .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("terms") .collectMode(mode) .subAggregation(new MaxAggregationBuilder("max").field("long")) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java index 078450445f546..5d27aff829f27 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java @@ -76,6 +76,7 @@ import org.elasticsearch.search.aggregations.pipeline.BucketScriptPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; @@ -417,7 +418,7 @@ public void testNestedOrdering() throws IOException { = new NumberFieldMapper.NumberFieldType("num_pages", NumberFieldMapper.NumberType.LONG); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("author"); - TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) .field("author").order(BucketOrder.aggregation("chapters>num_pages.value", true)); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); MaxAggregationBuilder maxAgg = new MaxAggregationBuilder("num_pages").field("num_pages"); @@ -466,7 +467,7 @@ public void testNestedOrdering() throws IOException { assertEquals(70, (int) numPages.getValue()); // reverse order: - termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(ValueType.STRING) + termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) .field("author").order(BucketOrder.aggregation("chapters>num_pages.value", false)); nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); maxAgg = new MaxAggregationBuilder("num_pages").field("num_pages"); @@ -554,7 +555,7 @@ public void testNestedOrdering_random() throws IOException { = new NumberFieldMapper.NumberFieldType("num_pages", NumberFieldMapper.NumberType.LONG); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("author"); - TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) .size(books.size()).field("author") .order(BucketOrder.compound(BucketOrder.aggregation("chapters>num_pages.value", true), BucketOrder.key(true))); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); @@ -646,9 +647,9 @@ public void testPreGetChildLeafCollectors() throws IOException { iw.commit(); } try (IndexReader indexReader = wrapInMockESDirectoryReader(DirectoryReader.open(directory))) { - TermsAggregationBuilder valueBuilder = new TermsAggregationBuilder("value").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder valueBuilder = new TermsAggregationBuilder("value").userValueTypeHint(CoreValuesSourceType.BYTES) .field("value"); - TermsAggregationBuilder keyBuilder = new TermsAggregationBuilder("key").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder keyBuilder = new TermsAggregationBuilder("key").userValueTypeHint(CoreValuesSourceType.BYTES) .field("key"); keyBuilder.subAggregation(valueBuilder); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder(NESTED_AGG, "nested_field"); @@ -759,7 +760,7 @@ public void testNestedWithPipeline() throws IOException { } try (IndexReader indexReader = wrapInMockESDirectoryReader(DirectoryReader.open(directory))) { NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder(NESTED_AGG, NESTED_OBJECT) - .subAggregation(new TermsAggregationBuilder("terms").field(VALUE_FIELD_NAME).userValueTypeHint(ValueType.NUMERIC) + .subAggregation(new TermsAggregationBuilder("terms").field(VALUE_FIELD_NAME).userValueTypeHint(CoreValuesSourceType.NUMERIC) .subAggregation(new MaxAggregationBuilder(MAX_AGG_NAME).field(VALUE_FIELD_NAME)) .subAggregation(new BucketScriptPipelineAggregationBuilder("bucketscript", Collections.singletonMap("_value", MAX_AGG_NAME), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java index 9f39e0e896d3a..67bf784a4a2e6 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java @@ -35,7 +35,9 @@ import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregatorTestCase; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -61,7 +63,7 @@ public class BinaryTermsAggregatorTests extends AggregatorTestCase { public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), ValueType.STRING + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.BYTES ); } @@ -97,7 +99,7 @@ public void testBadIncludeExclude() throws IOException { e = expectThrows(AggregationExecutionException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD).includeExclude(includeExclude).format("yyyy-MM-dd"), - agg -> fail("test should have failed with exception"), ValueType.STRING // string type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.BYTES // string type hint )); assertThat(e.getMessage(), equalTo("Aggregation [_name] cannot support regular expression style include/exclude settings as " + "they can only be applied to string fields. Use an array of values for include/exclude clauses")); @@ -106,14 +108,14 @@ public void testBadIncludeExclude() throws IOException { public void testBadUserValueTypeHint() throws IOException { IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD), - agg -> fail("test should have failed with exception"), ValueType.NUMERIC // numeric type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.NUMERIC // numeric type hint )); assertThat(e.getMessage(), equalTo("Expected numeric type on field [binary], but got [binary]")); } private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValueType valueType) throws IOException { + Consumer verify, ValuesSourceType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java index 4e049c7e3a176..c080cf565ae3b 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java @@ -32,7 +32,9 @@ import org.elasticsearch.index.mapper.KeywordFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.search.aggregations.AggregatorTestCase; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -63,7 +65,7 @@ public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(KEYWORD_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), ValueType.STRING // with type hint + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.BYTES // with type hint ); } @@ -91,13 +93,13 @@ public void testMatchAllDocs() throws IOException { assertThat(bucket.getKey(), equalTo(String.valueOf(9L - i))); assertThat(bucket.getDocCount(), equalTo(9L - i)); } - }, ValueType.STRING // with type hint + }, CoreValuesSourceType.BYTES // with type hint ); } private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValueType valueType) throws IOException { + Consumer verify, ValuesSourceType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java index 174a8a1aed6e8..7f78ae145f2a2 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java @@ -34,7 +34,9 @@ import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregatorTestCase; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -66,7 +68,7 @@ public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(LONG_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), ValueType.NUMERIC // with type hint + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.NUMERIC // with type hint ); } @@ -94,7 +96,7 @@ public void testMatchAllDocs() throws IOException { assertThat(bucket.getKey(), equalTo(9L - i)); assertThat(bucket.getDocCount(), equalTo(9L - i)); } - }, ValueType.NUMERIC //with type hint + }, CoreValuesSourceType.NUMERIC //with type hint ); } @@ -115,7 +117,7 @@ public void testBadIncludeExclude() throws IOException { e = expectThrows(AggregationExecutionException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(LONG_FIELD).includeExclude(includeExclude).format("yyyy-MM-dd"), - agg -> fail("test should have failed with exception"), ValueType.NUMERIC // with type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.NUMERIC // with type hint )); assertThat(e.getMessage(), equalTo("Aggregation [_name] cannot support regular expression style " + "include/exclude settings as they can only be applied to string fields. Use an array of numeric " + @@ -125,7 +127,7 @@ public void testBadIncludeExclude() throws IOException { private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValueType valueType) throws IOException { + Consumer verify, ValuesSourceType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java index f5697e0153f50..47b1176329a99 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java @@ -18,6 +18,7 @@ */ package org.elasticsearch.search.aggregations.bucket.terms; +import org.apache.logging.log4j.core.Core; import org.apache.lucene.document.BinaryDocValuesField; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; @@ -179,7 +180,7 @@ public void testUsesGlobalOrdinalsByDefault() throws Exception { // We do not use LuceneTestCase.newSearcher because we need a DirectoryReader IndexSearcher indexSearcher = new IndexSearcher(indexReader); - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .field("string"); MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType("string"); @@ -247,7 +248,7 @@ public void testSimple() throws Exception { IndexSearcher indexSearcher = newIndexSearcher(indexReader); for (TermsAggregatorFactory.ExecutionMode executionMode : TermsAggregatorFactory.ExecutionMode.values()) { TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionMode.toString()) .field("string") .order(BucketOrder.key(true)); @@ -315,7 +316,7 @@ public void testStringIncludeExclude() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null)) .field("mv_field") @@ -351,7 +352,7 @@ public void testStringIncludeExclude() throws Exception { assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("sv_field"); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null)) .field("sv_field") @@ -375,7 +376,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(4).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", "(val000|val001)")) .field("mv_field") @@ -405,7 +406,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(7).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, "val00.+")) .field("mv_field") @@ -422,7 +423,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(new String[]{"val000", "val010"}, null)) .field("mv_field") @@ -439,7 +440,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new String[]{"val001", "val002", "val003", "val004", "val005", "val006", "val007", "val008", "val009", "val011"})) @@ -457,7 +458,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null, null, new String[]{"val001", "val002", "val003", "val004", "val005", "val006", "val007", "val008"})) @@ -475,7 +476,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.STRING) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, "val01.+", new String[]{"val001", "val002", "val010"}, null)) @@ -531,7 +532,7 @@ public void testNumericIncludeExclude() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.LONG) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(new long[]{0, 5}, null)) .field("long_field") @@ -548,7 +549,7 @@ public void testNumericIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.LONG) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new long[]{0, 5})) .field("long_field") @@ -571,7 +572,7 @@ public void testNumericIncludeExclude() throws Exception { fieldType = new NumberFieldMapper.NumberFieldType("double_field", NumberFieldMapper.NumberType.DOUBLE); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.DOUBLE) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(new double[]{0.0, 5.0}, null)) .field("double_field") @@ -588,7 +589,7 @@ public void testNumericIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.DOUBLE) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new double[]{0.0, 5.0})) .field("double_field") @@ -622,9 +623,9 @@ public void testStringTermsAggregator() throws Exception { } }; MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType("field"); - termsAggregator(ValueType.STRING, fieldType, i -> Integer.toString(i), + termsAggregator(CoreValuesSourceType.BYTES, fieldType, i -> Integer.toString(i), String::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(ValueType.STRING, fieldType, i -> Integer.toString(i), + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.BYTES, fieldType, i -> Integer.toString(i), val -> new SortedDocValuesField("field", new BytesRef(val))); } @@ -638,8 +639,8 @@ public void testLongTermsAggregator() throws Exception { }; MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("field", NumberFieldMapper.NumberType.LONG); - termsAggregator(ValueType.LONG, fieldType, Integer::longValue, Long::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(ValueType.LONG, fieldType, Integer::longValue, val -> new NumericDocValuesField("field", val)); + termsAggregator(CoreValuesSourceType.NUMERIC, fieldType, Integer::longValue, Long::compareTo, luceneFieldFactory); + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.NUMERIC, fieldType, Integer::longValue, val -> new NumericDocValuesField("field", val)); } public void testDoubleTermsAggregator() throws Exception { @@ -652,8 +653,8 @@ public void testDoubleTermsAggregator() throws Exception { }; MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("field", NumberFieldMapper.NumberType.DOUBLE); - termsAggregator(ValueType.DOUBLE, fieldType, Integer::doubleValue, Double::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(ValueType.DOUBLE, fieldType, Integer::doubleValue, + termsAggregator(CoreValuesSourceType.NUMERIC, fieldType, Integer::doubleValue, Double::compareTo, luceneFieldFactory); + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.NUMERIC, fieldType, Integer::doubleValue, val -> new NumericDocValuesField("field", Double.doubleToRawLongBits(val))); } @@ -671,11 +672,11 @@ public void testIpTermsAggregator() throws Exception { BytesRef b2 = new BytesRef(InetAddressPoint.encode(o2)); return b1.compareTo(b2); }; - termsAggregator(ValueType.IP, new IpFieldMapper.IpFieldType("field"), i -> base[0] = InetAddressPoint.nextUp(base[0]), + termsAggregator(CoreValuesSourceType.IP, new IpFieldMapper.IpFieldType("field"), i -> base[0] = InetAddressPoint.nextUp(base[0]), comparator, luceneFieldFactory); } - private void termsAggregator(ValueType valueType, MappedFieldType fieldType, + private void termsAggregator(ValuesSourceType valueType, MappedFieldType fieldType, Function valueFactory, Comparator keyComparator, BiFunction luceneFieldFactory) throws Exception { final Map counts = new HashMap<>(); @@ -768,7 +769,7 @@ private void termsAggregator(ValueType valueType, MappedFieldType fieldType, for (int i = 0; i < size; i++) { Map.Entry expected = expectedBuckets.get(i); Terms.Bucket actual = result.getBuckets().get(i); - if (valueType == ValueType.IP) { + if (valueType == CoreValuesSourceType.IP) { assertEquals(String.valueOf(expected.getKey()).substring(1), actual.getKey()); } else { assertEquals(expected.getKey(), actual.getKey()); @@ -799,7 +800,7 @@ private void termsAggregator(ValueType valueType, MappedFieldType fieldType, assertEquals(expectedFilteredCounts, result.getBuckets().size()); for (Terms.Bucket actual : result.getBuckets()) { Integer expectedCount; - if (valueType == ValueType.IP) { + if (valueType == CoreValuesSourceType.IP) { expectedCount = filteredCounts.get(InetAddresses.forString((String)actual.getKey())); } else { expectedCount = filteredCounts.get(actual.getKey()); @@ -812,7 +813,7 @@ private void termsAggregator(ValueType valueType, MappedFieldType fieldType, } } - private void termsAggregatorWithNestedMaxAgg(ValueType valueType, MappedFieldType fieldType, + private void termsAggregatorWithNestedMaxAgg(ValuesSourceType valueType, MappedFieldType fieldType, Function valueFactory, Function luceneFieldFactory) throws Exception { final Map counts = new HashMap<>(); @@ -885,7 +886,7 @@ public void testEmpty() throws Exception { try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { IndexSearcher indexSearcher = newIndexSearcher(indexReader); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field("string"); SearchContext context = createSearchContext(indexSearcher, null, fieldType1); Aggregator aggregator = createAggregator(aggregationBuilder, context); @@ -895,7 +896,7 @@ public void testEmpty() throws Exception { assertEquals("_name", result.getName()); assertEquals(0, result.getBuckets().size()); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.LONG).field("long"); + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC).field("long"); context = createSearchContext(indexSearcher, null, fieldType2); aggregator = createAggregator(aggregationBuilder, context); aggregator.preCollection(); @@ -904,7 +905,7 @@ public void testEmpty() throws Exception { assertEquals("_name", result.getName()); assertEquals(0, result.getBuckets().size()); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.DOUBLE).field("double"); + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC).field("double"); context = createSearchContext(indexSearcher, null, fieldType3); aggregator = createAggregator(aggregationBuilder, context); aggregator.preCollection(); @@ -922,7 +923,7 @@ public void testUnmapped() throws Exception { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { IndexSearcher indexSearcher = newIndexSearcher(indexReader); - ValueType[] valueTypes = new ValueType[]{ValueType.STRING, ValueType.LONG, ValueType.DOUBLE}; + ValuesSourceType[] valueTypes = new ValuesSourceType[]{CoreValuesSourceType.BYTES, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC}; String[] fieldNames = new String[]{"string", "long", "double"}; for (int i = 0; i < fieldNames.length; i++) { TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") @@ -955,7 +956,7 @@ public void testUnmappedWithMissing() throws Exception { MappedFieldType fieldType1 = new KeywordFieldMapper.KeywordFieldType("unrelated_value"); IndexSearcher indexSearcher = newIndexSearcher(indexReader); - ValueType[] valueTypes = new ValueType[]{ValueType.STRING, ValueType.LONG, ValueType.DOUBLE}; + ValuesSourceType[] valueTypes = new ValuesSourceType[]{CoreValuesSourceType.BYTES, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC}; String[] fieldNames = new String[]{"string", "long", "double"}; Object[] missingValues = new Object[]{"abc", 19L, 19.2}; @@ -1070,12 +1071,12 @@ public void testNestedTermsAgg() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); Aggregator.SubAggCollectionMode collectionMode = randomFrom(Aggregator.SubAggCollectionMode.values()); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name1") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("field1") .order(BucketOrder.key(true)) - .subAggregation(new TermsAggregationBuilder("_name2").userValueTypeHint(ValueType.STRING) + .subAggregation(new TermsAggregationBuilder("_name2").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("field2") @@ -1109,7 +1110,7 @@ public void testNestedTermsAgg() throws Exception { public void testMixLongAndDouble() throws Exception { for (TermsAggregatorFactory.ExecutionMode executionMode : TermsAggregatorFactory.ExecutionMode.values()) { - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(ValueType.LONG) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) .executionHint(executionMode.toString()) .field("number") .order(BucketOrder.key(true)); @@ -1177,13 +1178,13 @@ public void testGlobalAggregationWithScore() throws IOException { Aggregator.SubAggCollectionMode collectionMode = randomFrom(Aggregator.SubAggCollectionMode.values()); GlobalAggregationBuilder globalBuilder = new GlobalAggregationBuilder("global") .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("keyword") .order(BucketOrder.key(true)) .subAggregation( - new TermsAggregationBuilder("sub_terms").userValueTypeHint(ValueType.STRING) + new TermsAggregationBuilder("sub_terms").userValueTypeHint(CoreValuesSourceType.BYTES) .executionHint(executionHint) .collectMode(collectionMode) .field("keyword").order(BucketOrder.key(true)) @@ -1228,7 +1229,7 @@ public void testWithNestedAggregations() throws IOException { for (Aggregator.SubAggCollectionMode mode : Aggregator.SubAggCollectionMode.values()) { for (boolean withScore : new boolean[]{true, false}) { NestedAggregationBuilder nested = new NestedAggregationBuilder("nested", "nested_object") - .subAggregation(new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.LONG) + .subAggregation(new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("nested_value") // force the breadth_first mode .collectMode(mode) @@ -1272,7 +1273,7 @@ public void testNumberToStringValueScript() throws IOException { = new NumberFieldMapper.NumberFieldType("number", NumberFieldMapper.NumberType.INTEGER); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("name") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .field("number") .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, STRING_SCRIPT_NAME, Collections.emptyMap())); @@ -1400,7 +1401,7 @@ public void testOrderByPipelineAggregation() throws Exception { "script", new Script("2.718")); TermsAggregationBuilder termsAgg = terms("terms") .field("field") - .userValueTypeHint(ValueType.STRING) + .userValueTypeHint(CoreValuesSourceType.BYTES) .order(BucketOrder.aggregation("script", true)) .subAggregation(bucketScriptAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java index b41d726da54af..96ed5fa92a595 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java @@ -53,7 +53,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.lookup.LeafDocLookup; @@ -511,7 +510,7 @@ public void testMultiValuedFieldWithValueScript() throws IOException { public void testOrderByEmptyAggregation() throws IOException { MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("value", NumberFieldMapper.NumberType.INTEGER); - AggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.NUMERIC) + AggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value") .order(BucketOrder.compound(BucketOrder.aggregation("filter>avg", true))) .subAggregation(AggregationBuilders.filter("filter", termQuery("value", 100)) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java index 3b980cbd8bb87..a443c1a8f67b8 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java @@ -730,7 +730,7 @@ public void testEmptyAggregation() throws Exception { public void testOrderByEmptyAggregation() throws IOException { MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("value", NumberFieldMapper.NumberType.INTEGER); - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.NUMERIC) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value") .order(BucketOrder.compound(BucketOrder.aggregation("filter>max", true))) .subAggregation(AggregationBuilders.filter("filter", termQuery("value", 100)) @@ -843,7 +843,7 @@ public void testNestedEarlyTermination() throws Exception { ValueCountAggregationBuilder countAggregationBuilder = new ValueCountAggregationBuilder("count") .field("values"); TermsAggregationBuilder termsAggregationBuilder = new TermsAggregationBuilder("terms") - .userValueTypeHint(ValueType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value").collectMode(collectionMode) .subAggregation(new MaxAggregationBuilder("sub_max").field("invalid")); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java index 60782469d8486..a99a8df2e34ae 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java @@ -379,7 +379,7 @@ private void testAggregation(Query query, ValueCountAggregationBuilder aggregationBuilder = new ValueCountAggregationBuilder("_name"); if (valueType != null && testWithHint) { - aggregationBuilder.userValueTypeHint(valueType); + aggregationBuilder.userValueTypeHint(valueType.getValuesSourceType()); } aggregationBuilder.field(FIELD_NAME); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java index 5bc4eb7be9e37..7172bbb18781d 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java @@ -26,6 +26,7 @@ import org.elasticsearch.search.SearchModule; import org.elasticsearch.search.aggregations.AggregatorFactories; import org.elasticsearch.search.aggregations.metrics.WeightedAvgAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.test.AbstractSerializingTestCase; import org.junit.Before; @@ -66,6 +67,7 @@ protected WeightedAvgAggregationBuilder createTestInstance() { MultiValuesSourceFieldConfig valueConfig = new MultiValuesSourceFieldConfig.Builder().setFieldName("value_field").build(); MultiValuesSourceFieldConfig weightConfig = new MultiValuesSourceFieldConfig.Builder().setFieldName("weight_field").build(); WeightedAvgAggregationBuilder aggregationBuilder = new WeightedAvgAggregationBuilder(aggregationName) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .value(valueConfig) .weight(weightConfig); return aggregationBuilder; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java index 42476765e1ab9..5b20ade698509 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected AvgBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java index e1a187b0e1327..e5d499052e13e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java @@ -47,6 +47,7 @@ import org.elasticsearch.search.aggregations.bucket.filter.InternalFilters; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; @@ -75,7 +76,7 @@ public void testScript() throws IOException { MappedFieldType fieldType1 = new KeywordFieldMapper.KeywordFieldType("the_field"); FiltersAggregationBuilder filters = new FiltersAggregationBuilder("placeholder", new MatchAllQueryBuilder()) - .subAggregation(new TermsAggregationBuilder("the_terms").userValueTypeHint(ValueType.STRING).field("the_field") + .subAggregation(new TermsAggregationBuilder("the_terms").userValueTypeHint(CoreValuesSourceType.BYTES).field("the_field") .subAggregation(new AvgAggregationBuilder("the_avg").field("number_field"))) .subAggregation(new BucketScriptPipelineAggregationBuilder("bucket_script", Collections.singletonMap("the_avg", "the_terms['test1']>the_avg.value"), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java index a7e2db4bada33..cb8085e24de2a 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java @@ -24,6 +24,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -62,7 +63,7 @@ public void testSigmaFromInt() throws Exception { public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java index 7713a9f8d095c..5a61b4bbcf776 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected MaxBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java index e9d3e15a3fa2b..efe2661eea3c8 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected MinBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java index 0b8757441cdb4..624d8a851af79 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java @@ -24,6 +24,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -66,7 +67,7 @@ public void testPercentsFromMixedArray() throws Exception { public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java index dffef51f643dd..c707d1322db00 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -40,7 +41,7 @@ protected StatsBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(St public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java index fc8c1be801313..00536f943009f 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; @@ -39,7 +40,7 @@ protected SumBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java index d1caaacafe077..15d23e76fb5f7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java @@ -71,13 +71,13 @@ public void testUnmappedKeyword() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.STRING, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Bytes valuesSource = (ValuesSource.Bytes) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, ValueType.STRING, "field", null, "abc", null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "field", null, "abc", null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Bytes) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedBinaryDocValues values = valuesSource.bytesValues(ctx); @@ -128,13 +128,13 @@ public void testUnmappedLong() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.NUMBER, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.NUMERIC, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Numeric valuesSource = (ValuesSource.Numeric) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, ValueType.NUMBER, "field", null, 42, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.NUMERIC, "field", null, 42, null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Numeric) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedNumericDocValues values = valuesSource.longValues(ctx); @@ -185,13 +185,13 @@ public void testUnmappedBoolean() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.BOOLEAN, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BOOLEAN, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Numeric valuesSource = (ValuesSource.Numeric) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, ValueType.BOOLEAN, "field", null, true, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BOOLEAN, "field", null, true, null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Numeric) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedNumericDocValues values = valuesSource.longValues(ctx); @@ -221,7 +221,7 @@ public void testFieldAlias() throws Exception { })); withAggregationContext(mapperService, List.of(source(b -> b.field("field", "value"))), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, ValueType.STRING, "alias", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "alias", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Bytes valuesSource = (ValuesSource.Bytes) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java index d5ac7e5dd4904..eb6f09900dbeb 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java @@ -12,7 +12,6 @@ import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -27,7 +26,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java index cc46f7cf08957..bf16331fe322d 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java @@ -44,7 +44,7 @@ public class TTestAggregationBuilder extends MultiValuesSourceAggregationBuilder ObjectParser.fromBuilder(NAME, TTestAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, ValueType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); MultiValuesSourceParseHelper.declareField(A_FIELD.getPreferredName(), PARSER, true, false, true); MultiValuesSourceParseHelper.declareField(B_FIELD.getPreferredName(), PARSER, true, false, true); PARSER.declareString(TTestAggregationBuilder::testType, TYPE_FIELD); diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java index a0a536a7e98b4..e3d949881c32f 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java @@ -225,9 +225,9 @@ public void testNestedAggregation() throws IOException { textFieldType.setFielddata(true); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms") - .userValueTypeHint(ValueType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("value") - .subAggregation(new StringStatsAggregationBuilder("text_stats").field("text").userValueTypeHint(ValueType.STRING)); + .subAggregation(new StringStatsAggregationBuilder("text_stats").field("text").userValueTypeHint(CoreValuesSourceType.BYTES)); Directory directory = newDirectory(); RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory); diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java index 346dbb3b6f6df..ffaaec596a17a 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java @@ -11,7 +11,6 @@ import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.xpack.aggregatemetric.fielddata.IndexAggregateDoubleMetricFieldData; @@ -27,7 +26,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { throw new AggregationExecutionException("Value source of type [" + this.value() + "] is not supported by scripts"); } diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java index 205c25ed60ce6..372daab7c340a 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java @@ -13,6 +13,7 @@ import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.xpack.core.rollup.RollupField; @@ -308,7 +309,7 @@ public void testComparableNoTermsVsTerms() { DateHistogramAggregationBuilder builder = new DateHistogramAggregationBuilder("foo").field("foo") .calendarInterval(new DateHistogramInterval("1h")) - .subAggregation(new TermsAggregationBuilder("histo").userValueTypeHint(ValueType.STRING).field("bar")); + .subAggregation(new TermsAggregationBuilder("histo").userValueTypeHint(CoreValuesSourceType.BYTES).field("bar")); Set caps = new HashSet<>(2); caps.add(cap); diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java index d12605c27f3a6..32fa5577ab6f9 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java @@ -22,6 +22,7 @@ import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.StatsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder; import org.elasticsearch.test.ESTestCase; @@ -302,7 +303,7 @@ public void testAvgMetric() { public void testStringTerms() throws IOException { - TermsAggregationBuilder terms = new TermsAggregationBuilder("test_string_terms").userValueTypeHint(ValueType.STRING); + TermsAggregationBuilder terms = new TermsAggregationBuilder("test_string_terms").userValueTypeHint(CoreValuesSourceType.BYTES); terms.field("foo") .subAggregation(new MaxAggregationBuilder("the_max").field("max_field")) .subAggregation(new AvgAggregationBuilder("the_avg").field("avg_field")); diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java index 9387cac83912f..369ddd28186a0 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java @@ -66,6 +66,7 @@ import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.internal.InternalSearchResponse; import org.elasticsearch.xpack.core.rollup.RollupField; @@ -926,10 +927,10 @@ public void testMetric() throws IOException { public void testUnsupportedMetric() throws IOException { - AggregationBuilder nonRollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(ValueType.LONG) + AggregationBuilder nonRollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("foo"); String fieldName = "foo.max." + RollupField.VALUE; - AggregationBuilder rollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(ValueType.LONG) + AggregationBuilder rollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field(fieldName); MappedFieldType nrFTvalue = new NumberFieldMapper.NumberFieldType("foo", NumberFieldMapper.NumberType.LONG); @@ -954,10 +955,10 @@ public void testUnsupportedMetric() throws IOException { } public void testStringTerms() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("stringfield.terms." + RollupField.COUNT_FIELD)); @@ -986,10 +987,10 @@ public void testStringTerms() throws IOException { } public void testStringTermsNullValue() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.STRING) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) .field("stringfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("stringfield.terms." + RollupField.COUNT_FIELD)); @@ -1024,10 +1025,10 @@ public void testStringTermsNullValue() throws IOException { } public void testLongTerms() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.LONG) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("longField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(ValueType.LONG) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) .field("longfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("longfield.terms." + RollupField.COUNT_FIELD)); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java index 30e87ea5f6b05..0119ae5febd88 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java @@ -46,7 +46,7 @@ public class GeoLineAggregationBuilder public static final ObjectParser PARSER = ObjectParser.fromBuilder(NAME, GeoLineAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, ValueType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); MultiValuesSourceParseHelper.declareField(POINT_FIELD.getPreferredName(), PARSER, true, false, false); MultiValuesSourceParseHelper.declareField(SORT_FIELD.getPreferredName(), PARSER, true, false, false); PARSER.declareString((builder, order) -> builder.sortOrder(SortOrder.fromString(order)), ORDER_FIELD); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java index cacb06ff14e80..e816df8654637 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java @@ -39,7 +39,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { // TODO (support scripts) throw new UnsupportedOperationException("geo_shape"); } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java index 09be0407dd1a4..de3cfa96017b1 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java @@ -6,6 +6,7 @@ package org.elasticsearch.xpack.sql.querydsl.agg; import org.elasticsearch.search.aggregations.bucket.composite.CompositeValuesSourceBuilder; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.xpack.ql.expression.gen.script.ScriptTemplate; import org.elasticsearch.xpack.ql.querydsl.container.Sort.Direction; @@ -42,21 +43,21 @@ public final CompositeValuesSourceBuilder asValueSource() { if (script != null) { builder.script(script.toPainless()); if (script.outputType().isInteger()) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (script.outputType().isRational()) { - builder.userValuetypeHint(ValueType.DOUBLE); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (DataTypes.isString(script.outputType())) { - builder.userValuetypeHint(ValueType.STRING); + builder.userValuetypeHint(CoreValuesSourceType.BYTES); } else if (script.outputType() == DATE) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.DATE); } else if (script.outputType() == TIME) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (script.outputType() == DATETIME) { - builder.userValuetypeHint(ValueType.LONG); + builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); } else if (script.outputType() == BOOLEAN) { - builder.userValuetypeHint(ValueType.BOOLEAN); + builder.userValuetypeHint(CoreValuesSourceType.BOOLEAN); } else if (script.outputType() == IP) { - builder.userValuetypeHint(ValueType.IP); + builder.userValuetypeHint(CoreValuesSourceType.IP); } } // field based From a56eca238e9f7ee87fcfe0f712ed65e0f1176bec Mon Sep 17 00:00:00 2001 From: Roberto Miyoshi Date: Thu, 17 Dec 2020 22:28:54 -0300 Subject: [PATCH 7/7] Parse user type hints directly to ValuesSourceTypes --- .../client/RequestConvertersTests.java | 3 +- .../org/elasticsearch/client/SearchIT.java | 19 ++-- .../matrix/stats/MatrixStatsParser.java | 4 +- .../ArrayValuesSourceAggregationBuilder.java | 16 +++- .../support/ArrayValuesSourceParser.java | 16 ++-- .../org/elasticsearch/search/CCSDuelIT.java | 19 ++-- .../action/search/TransportSearchIT.java | 3 +- .../bucket/terms/StringTermsIT.java | 3 +- .../CompositeValuesSourceBuilder.java | 24 +++-- .../CompositeValuesSourceParserHelper.java | 4 +- .../bucket/range/InternalDateRange.java | 6 +- .../bucket/range/InternalGeoDistance.java | 5 +- .../bucket/range/InternalRange.java | 5 +- .../WeightedAvgAggregationBuilder.java | 2 +- .../support/CoreValuesSourceType.java | 96 ++++++++++++++++--- .../MultiValuesSourceAggregationBuilder.java | 17 ++-- .../support/MultiValuesSourceParseHelper.java | 4 +- .../aggregations/support/ValuesSource.java | 6 +- .../ValuesSourceAggregationBuilder.java | 18 ++-- .../support/ValuesSourceConfig.java | 26 ++--- .../support/ValuesSourceType.java | 7 +- .../search/SearchServiceTests.java | 9 +- .../aggregations/bucket/FiltersTests.java | 3 +- .../composite/CompositeAggregatorTests.java | 5 +- .../bucket/nested/NestedAggregatorTests.java | 13 ++- .../terms/BinaryTermsAggregatorTests.java | 10 +- .../terms/KeywordTermsAggregatorTests.java | 8 +- .../terms/NumericTermsAggregatorTests.java | 10 +- .../bucket/terms/TermsAggregatorTests.java | 77 ++++++++------- .../metrics/AvgAggregatorTests.java | 2 +- .../metrics/MaxAggregatorTests.java | 5 +- .../metrics/ValueCountAggregatorTests.java | 35 ++++--- .../WeightedAvgAggregationBuilderTests.java | 2 +- .../aggregations/pipeline/AvgBucketTests.java | 3 +- .../pipeline/BucketScriptAggregatorTests.java | 3 +- .../pipeline/ExtendedStatsBucketTests.java | 3 +- .../aggregations/pipeline/MaxBucketTests.java | 3 +- .../aggregations/pipeline/MinBucketTests.java | 3 +- .../pipeline/PercentilesBucketTests.java | 3 +- .../pipeline/StatsBucketTests.java | 3 +- .../aggregations/pipeline/SumBucketTests.java | 3 +- .../support/ValuesSourceConfigTests.java | 14 +-- .../support/AnalyticsValuesSourceType.java | 7 +- .../ttest/TTestAggregationBuilder.java | 3 +- .../StringStatsAggregatorTests.java | 5 +- .../AggregateMetricsValuesSourceType.java | 7 +- .../rollup/RollupJobIdentifierUtilTests.java | 3 +- .../rollup/RollupRequestTranslationTests.java | 3 +- .../RollupResponseTranslationTests.java | 17 ++-- .../GeoLineAggregationBuilder.java | 3 +- .../support/GeoShapeValuesSourceType.java | 9 +- .../xpack/sql/querydsl/agg/GroupByKey.java | 17 ++-- 52 files changed, 316 insertions(+), 278 deletions(-) diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java index b1f723b43543b..ec88ca0738d91 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java @@ -93,7 +93,6 @@ import org.elasticsearch.search.Scroll; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; @@ -1080,7 +1079,7 @@ public static SearchSourceBuilder createTestSearchSourceBuilder() { } if (randomBoolean()) { searchSourceBuilder.aggregation(new TermsAggregationBuilder(randomAlphaOfLengthBetween(3, 10)) - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field(randomAlphaOfLengthBetween(3, 10))); } if (randomBoolean()) { diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java index 76799ee11ea35..4c32485ef3bc5 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/SearchIT.java @@ -77,7 +77,6 @@ import org.elasticsearch.search.aggregations.metrics.WeightedAvgAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; @@ -261,7 +260,7 @@ public void testSearchMatchQuery() throws IOException { public void testSearchWithTermsAgg() throws IOException { SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES) + searchSourceBuilder.aggregation(new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("type.keyword")); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); @@ -285,7 +284,7 @@ public void testSearchWithTermsAgg() throws IOException { public void testSearchWithRareTermsAgg() throws IOException { SearchRequest searchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - searchSourceBuilder.aggregation(new RareTermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES) + searchSourceBuilder.aggregation(new RareTermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("type.keyword").maxDocCount(2)); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); @@ -374,7 +373,7 @@ public void testSearchWithRangeAgg() throws IOException { public void testSearchWithTermsAndRangeAgg() throws IOException { SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES).field("type.keyword"); + TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).field("type.keyword"); agg.subAggregation(new RangeAggregationBuilder("subagg").field("num") .addRange("first", 0, 30).addRange("second", 31, 200)); searchSourceBuilder.aggregation(agg); @@ -428,7 +427,7 @@ public void testSearchWithTermsAndRangeAgg() throws IOException { public void testSearchWithTermsAndWeightedAvg() throws IOException { SearchRequest searchRequest = new SearchRequest("index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); - TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.BYTES).field("type.keyword"); + TermsAggregationBuilder agg = new TermsAggregationBuilder("agg1").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).field("type.keyword"); agg.subAggregation(new WeightedAvgAggregationBuilder("subagg") .value(new MultiValuesSourceFieldConfig.Builder().setFieldName("num").build()) .weight(new MultiValuesSourceFieldConfig.Builder().setFieldName("num2").build()) @@ -555,10 +554,10 @@ public void testSearchWithParentJoin() throws IOException { client().performRequest(new Request(HttpPost.METHOD_NAME, "/_refresh")); TermsAggregationBuilder leafTermAgg = new TermsAggregationBuilder("top-names") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("owner.display_name.keyword").size(10); ChildrenAggregationBuilder childrenAgg = new ChildrenAggregationBuilder("to-answers", "answer").subAggregation(leafTermAgg); - TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder termsAgg = new TermsAggregationBuilder("top-tags").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("tags.keyword") .size(10).subAggregation(childrenAgg); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); @@ -771,17 +770,17 @@ public void testMultiSearch() throws Exception { public void testMultiSearch_withAgg() throws Exception { MultiSearchRequest multiSearchRequest = new MultiSearchRequest(); SearchRequest searchRequest1 = new SearchRequest("index1"); - searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) + searchRequest1.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest1); SearchRequest searchRequest2 = new SearchRequest("index2"); - searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) + searchRequest2.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest2); SearchRequest searchRequest3 = new SearchRequest("index3"); - searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.BYTES) + searchRequest3.source().size(0).aggregation(new TermsAggregationBuilder("name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("field.keyword") .order(BucketOrder.key(true))); multiSearchRequest.add(searchRequest3); diff --git a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/MatrixStatsParser.java b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/MatrixStatsParser.java index 0f48d1855ae3e..a720027c34eb9 100644 --- a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/MatrixStatsParser.java +++ b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/matrix/stats/MatrixStatsParser.java @@ -22,7 +22,7 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.MultiValueMode; import org.elasticsearch.search.aggregations.support.ArrayValuesSourceParser.NumericValuesSourceParser; -import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -50,7 +50,7 @@ protected boolean token(String aggregationName, String currentFieldName, XConten @Override protected MatrixStatsAggregationBuilder createFactory(String aggregationName, ValuesSourceType valuesSourceType, - ValueType targetValueType, Map otherOptions) { + CoreValuesSourceType.ValueType targetValueType, Map otherOptions) { MatrixStatsAggregationBuilder builder = new MatrixStatsAggregationBuilder(aggregationName); String mode = (String)otherOptions.get(MULTIVALUE_MODE_FIELD); if (mode != null) { diff --git a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java index c20956d4a4851..d43edd97ac20e 100644 --- a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java +++ b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceAggregationBuilder.java @@ -21,6 +21,7 @@ import org.elasticsearch.common.ParseField; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; import org.elasticsearch.search.aggregations.AggregationInitializationException; @@ -29,7 +30,12 @@ import org.elasticsearch.search.aggregations.AggregatorFactory; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; public abstract class ArrayValuesSourceAggregationBuilder> extends AbstractAggregationBuilder { @@ -74,7 +80,7 @@ public final BucketCardinality bucketCardinality() { /* The parser doesn't support setting userValueTypeHint (aka valueType), but we do serialize and deserialize it, so keeping it around for now so as to not break BWC. Future refactors should feel free to remove this field. --Tozzi 2020-01-16 */ - private ValuesSourceType userValueTypeHint = null; + private CoreValuesSourceType.ValueType userValueTypeHint = null; private String format = null; private Object missing = null; private Map missingMap = Collections.emptyMap(); @@ -105,7 +111,7 @@ protected ArrayValuesSourceAggregationBuilder(StreamInput in) @SuppressWarnings("unchecked") private void read(StreamInput in) throws IOException { fields = (ArrayList)in.readGenericValue(); - userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); + userValueTypeHint = in.readOptionalWriteable(CoreValuesSourceType.ValueType::readFromStream); format = in.readOptionalString(); missingMap = in.readMap(); } @@ -113,7 +119,7 @@ private void read(StreamInput in) throws IOException { @Override protected final void doWriteTo(StreamOutput out) throws IOException { out.writeGenericValue(fields); - out.writeString(userValueTypeHint.typeName().toUpperCase(Locale.ROOT)); + out.writeOptionalWriteable(userValueTypeHint); out.writeOptionalString(format); out.writeMap(missingMap); innerWriteTo(out); @@ -220,7 +226,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field(CommonFields.FORMAT.getPreferredName(), format); } if (userValueTypeHint != null) { - builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.typeName()); + builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.getCoreValuesSourceType().typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceParser.java b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceParser.java index 4d935c92c2e1f..4a65469bae93a 100644 --- a/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceParser.java +++ b/modules/aggs-matrix-stats/src/main/java/org/elasticsearch/search/aggregations/support/ArrayValuesSourceParser.java @@ -38,29 +38,29 @@ public abstract class ArrayValuesSourceParser implement public abstract static class NumericValuesSourceParser extends ArrayValuesSourceParser { protected NumericValuesSourceParser(boolean formattable) { - super(formattable, CoreValuesSourceType.NUMERIC, ValueType.NUMERIC); + super(formattable, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.ValueType.NUMERIC); } } public abstract static class BytesValuesSourceParser extends ArrayValuesSourceParser { protected BytesValuesSourceParser(boolean formattable) { - super(formattable, CoreValuesSourceType.BYTES, ValueType.STRING); + super(formattable, CoreValuesSourceType.BYTES, CoreValuesSourceType.ValueType.STRING); } } public abstract static class GeoPointValuesSourceParser extends ArrayValuesSourceParser { protected GeoPointValuesSourceParser(boolean formattable) { - super(formattable, CoreValuesSourceType.GEOPOINT, ValueType.GEOPOINT); + super(formattable, CoreValuesSourceType.GEOPOINT, CoreValuesSourceType.ValueType.GEOPOINT); } } private boolean formattable = false; private ValuesSourceType valuesSourceType = null; - private ValueType targetValueType = null; + private CoreValuesSourceType.ValueType targetValueType = null; - private ArrayValuesSourceParser(boolean formattable, ValuesSourceType valuesSourceType, ValueType targetValueType) { + private ArrayValuesSourceParser(boolean formattable, ValuesSourceType valuesSourceType, CoreValuesSourceType.ValueType targetValueType) { this.valuesSourceType = valuesSourceType; this.targetValueType = targetValueType; this.formattable = formattable; @@ -188,13 +188,13 @@ private void parseMissingAndAdd(final String aggregationName, final String curre */ protected abstract ArrayValuesSourceAggregationBuilder createFactory(String aggregationName, ValuesSourceType valuesSourceType, - ValueType targetValueType, + CoreValuesSourceType.ValueType targetValueType, Map otherOptions); /** * Allows subclasses of {@link ArrayValuesSourceParser} to parse extra * parameters and store them in a {@link Map} which will later be passed to - * {@link #createFactory(String, ValuesSourceType, ValueType, Map)}. + * {@link #createFactory(String, ValuesSourceType, CoreValuesSourceType.ValueType, Map)}. * * @param aggregationName * the name of the aggregation @@ -207,7 +207,7 @@ protected abstract ArrayValuesSourceAggregationBuilder createFactory(String a * @param otherOptions * a {@link Map} of options to be populated by successive calls * to this method which will then be passed to the - * {@link #createFactory(String, ValuesSourceType, ValueType, Map)} + * {@link #createFactory(String, ValuesSourceType, CoreValuesSourceType.ValueType, Map)} * method * @return true if the current token was correctly parsed, * false otherwise diff --git a/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java b/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java index 3e99e25fb63ce..705defabe8020 100644 --- a/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java +++ b/qa/multi-cluster-search/src/test/java/org/elasticsearch/search/CCSDuelIT.java @@ -70,7 +70,6 @@ import org.elasticsearch.search.aggregations.pipeline.DerivativePipelineAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.MaxBucketPipelineAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.collapse.CollapseBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; @@ -530,32 +529,32 @@ public void testTermsAggsWithProfile() throws Exception { private static SearchSourceBuilder buildTermsAggsSource() { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); - TermsAggregationBuilder cluster = new TermsAggregationBuilder("cluster123").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder cluster = new TermsAggregationBuilder("cluster123").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); cluster.field("_index"); - TermsAggregationBuilder type = new TermsAggregationBuilder("type").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder type = new TermsAggregationBuilder("type").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); type.field("type.keyword"); type.showTermDocCountError(true); type.order(BucketOrder.key(true)); cluster.subAggregation(type); sourceBuilder.aggregation(cluster); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); tags.field("tags.keyword"); tags.showTermDocCountError(true); tags.size(100); sourceBuilder.aggregation(tags); - TermsAggregationBuilder tags2 = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder tags2 = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); tags2.field("tags.keyword"); tags.subAggregation(tags2); FilterAggregationBuilder answers = new FilterAggregationBuilder("answers", new TermQueryBuilder("type", "answer")); TermsAggregationBuilder answerPerQuestion = new TermsAggregationBuilder("answer_per_question") - .userValueTypeHint(CoreValuesSourceType.BYTES); + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING); answerPerQuestion.showTermDocCountError(true); answerPerQuestion.field("questionId.keyword"); answers.subAggregation(answerPerQuestion); - TermsAggregationBuilder answerPerUser = new TermsAggregationBuilder("answer_per_user").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder answerPerUser = new TermsAggregationBuilder("answer_per_user").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); answerPerUser.field("user.keyword"); answerPerUser.size(30); answerPerUser.showTermDocCountError(true); @@ -570,7 +569,7 @@ public void testDateHistogram() throws Exception { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); searchRequest.source(sourceBuilder); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); tags.field("tags.keyword"); tags.showTermDocCountError(true); DateHistogramAggregationBuilder creation = new DateHistogramAggregationBuilder("creation"); @@ -587,7 +586,7 @@ public void testCardinalityAgg() throws Exception { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(0); searchRequest.source(sourceBuilder); - CardinalityAggregationBuilder tags = new CardinalityAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); + CardinalityAggregationBuilder tags = new CardinalityAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); tags.field("tags.keyword"); sourceBuilder.aggregation(tags); duelSearch(searchRequest, CCSDuelIT::assertAggs); @@ -626,7 +625,7 @@ public void testTopHits() throws Exception { topHits.size(10); topHits.sort("creationDate", SortOrder.DESC); topHits.sort("id", SortOrder.ASC); - TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder tags = new TermsAggregationBuilder("tags").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); tags.field("tags.keyword"); tags.size(10); tags.subAggregation(topHits); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java b/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java index ed25de44ac84c..4f7d4c556728d 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/action/search/TransportSearchIT.java @@ -64,7 +64,6 @@ import org.elasticsearch.search.aggregations.metrics.InternalMax; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.FetchSubPhase; import org.elasticsearch.search.fetch.FetchSubPhaseProcessor; @@ -238,7 +237,7 @@ public void testFinalReduce() { SearchSourceBuilder source = new SearchSourceBuilder(); source.size(0); originalRequest.source(source); - TermsAggregationBuilder terms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC); + TermsAggregationBuilder terms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.NUMERIC); terms.field("price"); terms.size(1); source.aggregation(terms); diff --git a/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java b/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java index 2507dcd066789..144a4a721d7eb 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsIT.java @@ -45,7 +45,6 @@ import org.elasticsearch.search.aggregations.metrics.Stats; import org.elasticsearch.search.aggregations.metrics.Sum; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.test.ESIntegTestCase; import org.junit.After; @@ -1190,7 +1189,7 @@ public void testScriptWithValueType() throws Exception { .size(0) .aggregation(terms("terms") .script(new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "42", Collections.emptyMap())) - .userValueTypeHint(randomFrom(CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC))); + .userValueTypeHint(randomFrom(CoreValuesSourceType.ValueType.NUMERIC, CoreValuesSourceType.ValueType.NUMBER))); String source = builder.toString(); try (XContentParser parser = createParser(JsonXContent.jsonXContent, source)) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java index b66cbe579f6ed..cfbe104fde46f 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java @@ -25,12 +25,16 @@ import org.elasticsearch.common.xcontent.ToXContentFragment; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.script.Script; -import org.elasticsearch.search.aggregations.support.*; +import org.elasticsearch.search.aggregations.support.AggregationContext; +import org.elasticsearch.search.aggregations.support.ValuesSource; +import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; +import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; +import org.elasticsearch.search.aggregations.support.ValuesSourceType; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.sort.SortOrder; import java.io.IOException; import java.time.ZoneId; -import java.util.Locale; import java.util.Objects; /** @@ -41,7 +45,7 @@ public abstract class CompositeValuesSourceBuilder, T> void declareValuesSource objectParser.declareBoolean(VB::missingBucket, new ParseField("missing_bucket")); objectParser.declareField(VB::userValuetypeHint, p -> { - ValuesSourceType valueType = CoreValuesSourceType.fromString(p.text()); + CoreValuesSourceType.ValueType valueType = CoreValuesSourceType.ValueType.fromString(p.text()); return valueType; }, new ParseField("value_type"), ObjectParser.ValueType.STRING); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalDateRange.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalDateRange.java index fd68e3e1ac4b5..440a3b65cbba0 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalDateRange.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalDateRange.java @@ -22,7 +22,7 @@ import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.InternalAggregations; -import org.elasticsearch.search.aggregations.support.ValueType; +import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import java.io.IOException; import java.time.Instant; @@ -82,8 +82,8 @@ DocValueFormat format() { public static class Factory extends InternalRange.Factory { @Override - public ValueType getValueType() { - return ValueType.DATE; + public CoreValuesSourceType.ValueType getValueType() { + return CoreValuesSourceType.ValueType.DATE; } @Override diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalGeoDistance.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalGeoDistance.java index 6699d1d1c48ef..d602890e0e835 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalGeoDistance.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalGeoDistance.java @@ -22,7 +22,6 @@ import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -55,8 +54,8 @@ public ValuesSourceType getValueSourceType() { } @Override - public ValueType getValueType() { - return ValueType.GEOPOINT; + public CoreValuesSourceType.ValueType getValueType() { + return CoreValuesSourceType.ValueType.GEOPOINT; } @Override diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java index 1ba14d7a0715c..80009745e9dc6 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/range/InternalRange.java @@ -26,7 +26,6 @@ import org.elasticsearch.search.aggregations.InternalAggregations; import org.elasticsearch.search.aggregations.InternalMultiBucketAggregation; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -190,8 +189,8 @@ public ValuesSourceType getValueSourceType() { return CoreValuesSourceType.NUMERIC; } - public ValueType getValueType() { - return ValueType.NUMERIC; + public CoreValuesSourceType.ValueType getValueType() { + return CoreValuesSourceType.ValueType.NUMERIC; } @SuppressWarnings("unchecked") diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java index 753412180a8c8..2902d7b11c56a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/metrics/WeightedAvgAggregationBuilder.java @@ -52,7 +52,7 @@ public class WeightedAvgAggregationBuilder extends MultiValuesSourceAggregationB public static final ObjectParser PARSER = ObjectParser.fromBuilder(NAME, WeightedAvgAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.ValueType.NUMERIC); MultiValuesSourceParseHelper.declareField(VALUE_FIELD.getPreferredName(), PARSER, true, false, false); MultiValuesSourceParseHelper.declareField(WEIGHT_FIELD.getPreferredName(), PARSER, true, false, false); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java index 2ace3519478bf..f27b9c667fa60 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/CoreValuesSourceType.java @@ -29,6 +29,9 @@ import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.Rounding; import org.elasticsearch.common.geo.GeoPoint; +import org.elasticsearch.common.io.stream.StreamInput; +import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.time.DateFormatter; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.IndexGeoPointFieldData; @@ -45,9 +48,7 @@ import java.io.IOException; import java.time.ZoneId; import java.time.ZoneOffset; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; +import java.util.*; import java.util.function.Function; /** @@ -62,7 +63,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { return new ValuesSource.Numeric.Script(script, scriptValueType); } @@ -102,7 +103,6 @@ public DocValueFormat getFormatter(String format, ZoneId tz) { } else { return new DocValueFormat.Decimal(format); } - } }, BYTES() { @@ -112,7 +112,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { return new ValuesSource.Bytes.Script(script); } @@ -150,7 +150,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } @@ -184,7 +184,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } @@ -212,7 +212,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { return BYTES.getScript(script, scriptValueType); } @@ -239,7 +239,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { return NUMERIC.getScript(script, scriptValueType); } @@ -354,7 +354,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, ValueType scriptValueType) { return NUMERIC.getScript(script, scriptValueType); } @@ -376,6 +376,20 @@ public DocValueFormat getFormatter(String format, ZoneId tz) { } ; + /*public static final Map valueTypeMap = new EnumMap<>(ValueType.class); + static { + valueTypeMap.put(ValueType.STRING, BYTES); + valueTypeMap.put(ValueType.LONG, NUMERIC); + valueTypeMap.put(ValueType.DOUBLE, NUMERIC); + valueTypeMap.put(ValueType.NUMBER, NUMERIC); + valueTypeMap.put(ValueType.DATE, DATE); + valueTypeMap.put(ValueType.IP, IP); + valueTypeMap.put(ValueType.NUMERIC, NUMERIC); + valueTypeMap.put(ValueType.GEOPOINT, GEOPOINT); + valueTypeMap.put(ValueType.BOOLEAN, BOOLEAN); + valueTypeMap.put(ValueType.RANGE, RANGE); + }*/ + public static ValuesSourceType fromString(String name) { return valueOf(name.trim().toUpperCase(Locale.ROOT)); } @@ -390,5 +404,63 @@ public String typeName() { } /** List containing all members of the enumeration. */ - public static List ALL_CORE = Arrays.asList(CoreValuesSourceType.values()); + public static List ALL_CORE = Arrays.asList(values()); + + public enum ValueType implements Writeable { + + STRING((byte) 1, CoreValuesSourceType.BYTES), + LONG((byte) 2, CoreValuesSourceType.NUMERIC), + DOUBLE((byte) 3, CoreValuesSourceType.NUMERIC), + NUMBER((byte) 4, CoreValuesSourceType.NUMERIC), + DATE((byte) 5, CoreValuesSourceType.DATE), + IP((byte) 6, CoreValuesSourceType.IP), + NUMERIC((byte) 7, CoreValuesSourceType.NUMERIC), + GEOPOINT((byte) 8, CoreValuesSourceType.GEOPOINT), + BOOLEAN((byte) 9, CoreValuesSourceType.BOOLEAN), + RANGE((byte) 10, CoreValuesSourceType.RANGE); + + private final byte id; + private final CoreValuesSourceType coreValuesSourceType; + + ValueType(byte id, CoreValuesSourceType coreValuesSourceType ) { + this.id = id; + this.coreValuesSourceType = coreValuesSourceType; + } + + public byte getId(){ + return id; + } + + public static ValueType fromString(String name) { + return valueOf(name.trim().toUpperCase(Locale.ROOT)); + } + + public static ValueType readFromStream(StreamInput in) throws IOException { + byte id = in.readByte(); + + for (ValueType valueType : ValueType.values()) { + if (id == valueType.id) { + return valueType; + } + } + throw new IOException("No ValueType found for id [" + id + "]"); + } + + public CoreValuesSourceType getCoreValuesSourceType(){ + return coreValuesSourceType; + } + + public static List forCoreValuesSourceType(CoreValuesSourceType coreValuesSourceType) { + List valueTypes = new ArrayList<>(); + for (ValueType valueType : values()) + if (valueType.coreValuesSourceType == coreValuesSourceType) + valueTypes.add(valueType); + return valueTypes; + } + + @Override + public void writeTo(StreamOutput out) throws IOException { + out.writeByte(id); + } + } } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java index b48d9f7da53f9..b7e9a4bc4dbcc 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceAggregationBuilder.java @@ -78,7 +78,7 @@ public AB subAggregations(Builder subFactories) { private Map fields = new HashMap<>(); - private ValuesSourceType userValueTypeHint = null; + private CoreValuesSourceType.ValueType userValueTypeHint = null; private String format = null; protected MultiValuesSourceAggregationBuilder(String name) { @@ -109,15 +109,14 @@ protected MultiValuesSourceAggregationBuilder(StreamInput in) @SuppressWarnings("unchecked") private void read(StreamInput in) throws IOException { fields = in.readMap(StreamInput::readString, MultiValuesSourceFieldConfig::new); - userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); + userValueTypeHint = in.readOptionalWriteable(CoreValuesSourceType.ValueType::readFromStream); format = in.readOptionalString(); } @Override protected final void doWriteTo(StreamOutput out) throws IOException { out.writeMap(fields, StreamOutput::writeString, (o, value) -> value.writeTo(o)); - String type = userValueTypeHint.typeName(); - out.writeString(type.toUpperCase(Locale.ROOT)); + out.writeOptionalWriteable(userValueTypeHint); out.writeOptionalString(format); innerWriteTo(out); } @@ -137,10 +136,10 @@ protected AB field(String propertyName, MultiValuesSourceFieldConfig config) { } /** - * Sets the {@link ValuesSourceType} for the value produced by this aggregation + * Sets the {@link CoreValuesSourceType.ValueType} for the value produced by this aggregation */ @SuppressWarnings("unchecked") - public AB userValueTypeHint(ValuesSourceType valueType) { + public AB userValueTypeHint(CoreValuesSourceType.ValueType valueType) { if (valueType == null) { throw new IllegalArgumentException("[userValueTypeHint] must not be null: [" + name + "]"); } @@ -185,13 +184,13 @@ protected final MultiValuesSourceAggregatorFactory doBuild(AggregationContext co } - private static DocValueFormat resolveFormat(@Nullable String format, @Nullable ValuesSourceType valueType, + private static DocValueFormat resolveFormat(@Nullable String format, @Nullable CoreValuesSourceType.ValueType valueType, ValuesSourceType defaultValuesSourceType) { if (valueType == null) { // If the user didn't send a hint, all we can do is fall back to the default return defaultValuesSourceType.getFormatter(format, null); } - DocValueFormat valueFormat = valueType.getFormatter(format, null); + DocValueFormat valueFormat = valueType.getCoreValuesSourceType().getFormatter(format,null); if (valueFormat instanceof DocValueFormat.Decimal && format != null) { valueFormat = new DocValueFormat.Decimal(format); } @@ -217,7 +216,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field(CommonFields.FORMAT.getPreferredName(), format); } if (userValueTypeHint != null) { - builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.typeName()); + builder.field(CommonFields.VALUE_TYPE.getPreferredName(), userValueTypeHint.getCoreValuesSourceType().typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java index 960ce3ccc5e34..c3dacbf50ac6c 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/MultiValuesSourceParseHelper.java @@ -29,10 +29,10 @@ public final class MultiValuesSourceParseHelper { public static void declareCommon( AbstractObjectParser, T> objectParser, boolean formattable, - ValuesSourceType expectedValueType) { + CoreValuesSourceType.ValueType expectedValueType) { objectParser.declareField(MultiValuesSourceAggregationBuilder::userValueTypeHint, p -> { - ValuesSourceType valueType = CoreValuesSourceType.fromString(p.text()); + CoreValuesSourceType.ValueType valueType = CoreValuesSourceType.ValueType.fromString(p.text()); if (expectedValueType != null && !valueType.equals(expectedValueType)) { throw new ParsingException(p.getTokenLocation(), "Aggregation [" + objectParser.getName() + "] was configured with an incompatible value type [" diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java index bad4eaf6f0075..5d43899717e1d 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSource.java @@ -534,16 +534,16 @@ public SortedNumericDoubleValues doubleValues(LeafReaderContext context) { */ public static class Script extends Numeric { private final AggregationScript.LeafFactory script; - private final ValuesSourceType scriptValueType; + private final CoreValuesSourceType.ValueType scriptValueType; - public Script(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public Script(AggregationScript.LeafFactory script, CoreValuesSourceType.ValueType scriptValueType) { this.script = script; this.scriptValueType = scriptValueType; } @Override public boolean isFloatingPoint() { - return scriptValueType != null ? scriptValueType == CoreValuesSourceType.NUMERIC : true; + return scriptValueType != null ? scriptValueType == CoreValuesSourceType.ValueType.DOUBLE : true; } @Override diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java index e64a47249e136..241f18e6a0d3a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregationBuilder.java @@ -61,7 +61,7 @@ public static void declareFields( ParseField.CommonFields.MISSING, ObjectParser.ValueType.VALUE); objectParser.declareField(ValuesSourceAggregationBuilder::userValueTypeHint, p -> { - ValuesSourceType type = CoreValuesSourceType.fromString(p.text()); + CoreValuesSourceType.ValueType type = CoreValuesSourceType.ValueType.fromString(p.text()); if (type == null) { throw new IllegalArgumentException("Unknown value type [" + p.text() + "]"); } @@ -136,7 +136,7 @@ public final BucketCardinality bucketCardinality() { private String field = null; private Script script = null; - private ValuesSourceType userValueTypeHint = null; + private CoreValuesSourceType.ValueType userValueTypeHint = null; private String format = null; private Object missing = null; private ZoneId timeZone = null; @@ -165,7 +165,7 @@ protected ValuesSourceAggregationBuilder(StreamInput in) throws IOException { super(in); if (serializeTargetValueType(in.getVersion())) { - ValueType valueType = in.readOptionalWriteable(ValueType::readFromStream); + CoreValuesSourceType.ValueType valueType = in.readOptionalWriteable(CoreValuesSourceType.ValueType::readFromStream); assert valueType == null; } read(in); @@ -180,7 +180,7 @@ private void read(StreamInput in) throws IOException { script = new Script(in); } if (in.readBoolean()) { - this.userValueTypeHint = CoreValuesSourceType.fromString(in.readString()); + this.userValueTypeHint = CoreValuesSourceType.ValueType.readFromStream(in); } format = in.readOptionalString(); missing = in.readGenericValue(); @@ -202,7 +202,7 @@ protected final void doWriteTo(StreamOutput out) throws IOException { boolean hasValueType = userValueTypeHint != null; out.writeBoolean(hasValueType); if (hasValueType) { - out.writeString(userValueTypeHint.typeName().toUpperCase(Locale.ROOT)); + userValueTypeHint.writeTo(out); } out.writeOptionalString(format); out.writeGenericValue(missing); @@ -268,11 +268,11 @@ public Script script() { * This setter should only be used during parsing, to set the userValueTypeHint. This is information the user provides in the json * query to indicate the output type of a script or the type of the 'missing' replacement value. * - * @param valueType - The parsed {@link ValuesSourceType} based on the string the user specified + * @param valueType - The parsed {@link CoreValuesSourceType.ValueType} based on the string the user specified * @return - The modified builder instance, for chaining. */ @SuppressWarnings("unchecked") - public AB userValueTypeHint(ValuesSourceType valueType) { + public AB userValueTypeHint(CoreValuesSourceType.ValueType valueType) { if (valueType == null) { // TODO: This is nonsense. We allow the value to be null (via constructor), but don't allow it to be set to null. This means // thing looking to copy settings (like RollupRequestTranslator) need to check if userValueTypeHint is not null, and then @@ -283,7 +283,7 @@ public AB userValueTypeHint(ValuesSourceType valueType) { return (AB) this; } - public ValuesSourceType userValueTypeHint() { + public CoreValuesSourceType.ValueType userValueTypeHint() { return userValueTypeHint; } @@ -415,7 +415,7 @@ public final XContentBuilder internalXContent(XContentBuilder builder, Params pa builder.field("time_zone", timeZone.toString()); } if (userValueTypeHint != null) { - builder.field("value_type", userValueTypeHint.typeName()); + builder.field("value_type", userValueTypeHint.getCoreValuesSourceType().typeName()); } doXContentBody(builder, params); builder.endObject(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java index 9e8e446ae21cc..8a082883de00a 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfig.java @@ -55,7 +55,7 @@ public class ValuesSourceConfig { * @return - An initialized {@link ValuesSourceConfig} that will yield the appropriate {@link ValuesSourceType} */ public static ValuesSourceConfig resolve(AggregationContext context, - ValuesSourceType userValueTypeHint, + CoreValuesSourceType.ValueType userValueTypeHint, String field, Script script, Object missing, @@ -85,7 +85,7 @@ public static ValuesSourceConfig resolve(AggregationContext context, * @return - An initialized {@link ValuesSourceConfig} that will yield the appropriate {@link ValuesSourceType} */ public static ValuesSourceConfig resolveUnregistered(AggregationContext context, - ValuesSourceType userValueTypeHint, + CoreValuesSourceType.ValueType userValueTypeHint, String field, Script script, Object missing, @@ -105,7 +105,7 @@ public static ValuesSourceConfig resolveUnregistered(AggregationContext context, } private static ValuesSourceConfig internalResolve(AggregationContext context, - ValuesSourceType userValueTypeHint, + CoreValuesSourceType.ValueType userValueTypeHint, String field, Script script, Object missing, @@ -116,13 +116,13 @@ private static ValuesSourceConfig internalResolve(AggregationContext context, ) { ValuesSourceConfig config; ValuesSourceType valuesSourceType = null; - ValuesSourceType scriptValueType = userValueTypeHint; + CoreValuesSourceType.ValueType scriptValueType = userValueTypeHint; FieldContext fieldContext = null; AggregationScript.LeafFactory aggregationScript = createScript(script, context); // returns null if script is null boolean unmapped = false; if (userValueTypeHint != null) { // If the user gave us a type hint, respect that. - valuesSourceType = userValueTypeHint; + valuesSourceType = userValueTypeHint.getCoreValuesSourceType(); } if (field == null) { if (script == null) { @@ -169,14 +169,14 @@ private static ValuesSourceConfig internalResolve(AggregationContext context, private interface FieldResolver { ValuesSourceType getValuesSourceType( FieldContext fieldContext, - ValuesSourceType userValueTypeHint, + CoreValuesSourceType.ValueType userValueTypeHint, ValuesSourceType defaultValuesSourceType); } private static ValuesSourceType getMappingFromRegistry( FieldContext fieldContext, - ValuesSourceType userValueTypeHint, + CoreValuesSourceType.ValueType userValueTypeHint, ValuesSourceType defaultValuesSourceType ) { return fieldContext.indexFieldData().getValuesSourceType(); @@ -184,7 +184,7 @@ private static ValuesSourceType getMappingFromRegistry( private static ValuesSourceType getLegacyMapping( FieldContext fieldContext, - ValuesSourceType userValueTypeHint, + CoreValuesSourceType.ValueType userValueTypeHint, ValuesSourceType defaultValuesSourceType ) { IndexFieldData indexFieldData = fieldContext.indexFieldData(); @@ -198,7 +198,7 @@ private static ValuesSourceType getLegacyMapping( if (userValueTypeHint == null) { return defaultValuesSourceType; } else { - return userValueTypeHint; + return userValueTypeHint.getCoreValuesSourceType(); } } } @@ -242,7 +242,7 @@ public static ValuesSourceConfig resolveUnmapped(ValuesSourceType valuesSourceTy private final ValuesSourceType valuesSourceType; private final FieldContext fieldContext; private final AggregationScript.LeafFactory script; - private final ValuesSourceType scriptValueType; + private final CoreValuesSourceType.ValueType scriptValueType; private final boolean unmapped; private final DocValueFormat format; private final Object missing; @@ -258,7 +258,7 @@ public ValuesSourceConfig( FieldContext fieldContext, boolean unmapped, AggregationScript.LeafFactory script, - ValuesSourceType scriptValueType, + CoreValuesSourceType.ValueType scriptValueType, Object missing, ZoneId timeZone, DocValueFormat format, @@ -341,7 +341,7 @@ public boolean valid() { return fieldContext != null || script != null || unmapped; } - public ValuesSourceType scriptValueType() { + public CoreValuesSourceType.ValueType scriptValueType() { return this.scriptValueType; } @@ -403,7 +403,7 @@ public boolean alignesWithSearchIndex() { */ public String getDescription() { if (script != null) { - return "Script yielding [" + (scriptValueType != null ? scriptValueType.typeName() : "unknown type") + "]"; + return "Script yielding [" + (scriptValueType != null ? scriptValueType.getCoreValuesSourceType().typeName() : "unknown type") + "]"; } MappedFieldType fieldType = fieldType(); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java index d0f7e1f4354f2..5434ed0c20a3d 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceType.java @@ -23,6 +23,7 @@ import org.elasticsearch.search.DocValueFormat; import java.time.ZoneId; +import java.util.Locale; /** * {@link ValuesSourceType} represents a collection of fields that share a common set of operations, for example all numeric fields. @@ -60,7 +61,7 @@ public interface ValuesSourceType { * @param scriptValueType - The expected output type of the script * @return - Script specialization of the base {@link ValuesSource} */ - ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType); + ValuesSource getScript(AggregationScript.LeafFactory script, CoreValuesSourceType.ValueType scriptValueType); /** * Return a {@link ValuesSource} wrapping a field for the given type. All {@link ValuesSource}s must implement this method. @@ -104,4 +105,8 @@ default DocValueFormat getFormatter(String format, ZoneId tz) { * @return the name of the Values Source Type */ String typeName(); + + default byte getId(String valueType) { + return CoreValuesSourceType.ValueType.valueOf(valueType.trim().toUpperCase(Locale.ROOT)).getId(); + } } diff --git a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java index 5f81758efd064..1361f26158e91 100644 --- a/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java +++ b/server/src/test/java/org/elasticsearch/search/SearchServiceTests.java @@ -77,7 +77,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.FetchSearchResult; import org.elasticsearch.search.fetch.ShardFetchRequest; @@ -716,7 +715,7 @@ public void testCanMatch() throws Exception { new AliasFilter(null, Strings.EMPTY_ARRAY), 1f, -1, null, null)).canMatch()); searchRequest.source(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(0))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).minDocCount(0))); assertTrue(service.canMatch(new ShardSearchRequest(OriginalIndices.NONE, searchRequest, indexShard.shardId(), 1, new AliasFilter(null, Strings.EMPTY_ARRAY), 1f, -1, null, null)).canMatch()); searchRequest.source(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) @@ -777,12 +776,12 @@ public void testCanRewriteToMatchNone() { assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder())); assertFalse(SearchService.canRewriteToMatchNone(null)); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(0)))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).minDocCount(0)))); assertTrue(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new TermQueryBuilder("foo", "bar")))); assertTrue(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(1)))); + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).minDocCount(1)))); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new MatchNoneQueryBuilder()) - .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.BYTES).minDocCount(1)) + .aggregation(new TermsAggregationBuilder("test").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).minDocCount(1)) .suggest(new SuggestBuilder()))); assertFalse(SearchService.canRewriteToMatchNone(new SearchSourceBuilder().query(new TermQueryBuilder("foo", "bar")) .suggest(new SuggestBuilder()))); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java index 958706f36d6bd..66f2577106ead 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java @@ -35,7 +35,6 @@ import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; import java.util.Collections; @@ -169,7 +168,7 @@ public void testRewrite() throws IOException { assertTrue(((FiltersAggregationBuilder) rewritten).isKeyed()); // test sub-agg filter that does rewrite - original = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BOOLEAN) + original = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.BOOLEAN) .subAggregation( new FiltersAggregationBuilder("my-agg", new KeyedFilter("my-filter", new BoolQueryBuilder())) ); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java index 8e781a8be315f..a7565024fe3f7 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java @@ -73,7 +73,6 @@ import org.elasticsearch.search.aggregations.metrics.TopHits; import org.elasticsearch.search.aggregations.metrics.TopHitsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.test.IndexSettingsModule; import org.junit.After; @@ -1846,7 +1845,7 @@ public void testWithTermsSubAggExecutionMode() throws Exception { .field("keyword"); return new CompositeAggregationBuilder("name", Collections.singletonList(terms)) .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("terms") .collectMode(mode) .subAggregation(new MaxAggregationBuilder("max").field("long")) @@ -1874,7 +1873,7 @@ public void testWithTermsSubAggExecutionMode() throws Exception { .field("keyword"); return new CompositeAggregationBuilder("name", Collections.singletonList(terms)) .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("terms") .collectMode(mode) .subAggregation(new MaxAggregationBuilder("max").field("long")) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java index 5d27aff829f27..37afde8dfe8af 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java @@ -77,7 +77,6 @@ import org.elasticsearch.search.aggregations.pipeline.InternalSimpleValue; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; import java.util.ArrayList; @@ -418,7 +417,7 @@ public void testNestedOrdering() throws IOException { = new NumberFieldMapper.NumberFieldType("num_pages", NumberFieldMapper.NumberType.LONG); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("author"); - TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("author").order(BucketOrder.aggregation("chapters>num_pages.value", true)); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); MaxAggregationBuilder maxAgg = new MaxAggregationBuilder("num_pages").field("num_pages"); @@ -467,7 +466,7 @@ public void testNestedOrdering() throws IOException { assertEquals(70, (int) numPages.getValue()); // reverse order: - termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) + termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("author").order(BucketOrder.aggregation("chapters>num_pages.value", false)); nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); maxAgg = new MaxAggregationBuilder("num_pages").field("num_pages"); @@ -555,7 +554,7 @@ public void testNestedOrdering_random() throws IOException { = new NumberFieldMapper.NumberFieldType("num_pages", NumberFieldMapper.NumberType.LONG); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("author"); - TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder termsBuilder = new TermsAggregationBuilder("authors").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .size(books.size()).field("author") .order(BucketOrder.compound(BucketOrder.aggregation("chapters>num_pages.value", true), BucketOrder.key(true))); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder("chapters", "nested_chapters"); @@ -647,9 +646,9 @@ public void testPreGetChildLeafCollectors() throws IOException { iw.commit(); } try (IndexReader indexReader = wrapInMockESDirectoryReader(DirectoryReader.open(directory))) { - TermsAggregationBuilder valueBuilder = new TermsAggregationBuilder("value").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder valueBuilder = new TermsAggregationBuilder("value").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("value"); - TermsAggregationBuilder keyBuilder = new TermsAggregationBuilder("key").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder keyBuilder = new TermsAggregationBuilder("key").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("key"); keyBuilder.subAggregation(valueBuilder); NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder(NESTED_AGG, "nested_field"); @@ -760,7 +759,7 @@ public void testNestedWithPipeline() throws IOException { } try (IndexReader indexReader = wrapInMockESDirectoryReader(DirectoryReader.open(directory))) { NestedAggregationBuilder nestedBuilder = new NestedAggregationBuilder(NESTED_AGG, NESTED_OBJECT) - .subAggregation(new TermsAggregationBuilder("terms").field(VALUE_FIELD_NAME).userValueTypeHint(CoreValuesSourceType.NUMERIC) + .subAggregation(new TermsAggregationBuilder("terms").field(VALUE_FIELD_NAME).userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .subAggregation(new MaxAggregationBuilder(MAX_AGG_NAME).field(VALUE_FIELD_NAME)) .subAggregation(new BucketScriptPipelineAggregationBuilder("bucketscript", Collections.singletonMap("_value", MAX_AGG_NAME), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java index 67bf784a4a2e6..187dd5071b14e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/BinaryTermsAggregatorTests.java @@ -36,8 +36,6 @@ import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -63,7 +61,7 @@ public class BinaryTermsAggregatorTests extends AggregatorTestCase { public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.BYTES + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.ValueType.STRING ); } @@ -99,7 +97,7 @@ public void testBadIncludeExclude() throws IOException { e = expectThrows(AggregationExecutionException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD).includeExclude(includeExclude).format("yyyy-MM-dd"), - agg -> fail("test should have failed with exception"), CoreValuesSourceType.BYTES // string type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.ValueType.STRING // string type hint )); assertThat(e.getMessage(), equalTo("Aggregation [_name] cannot support regular expression style include/exclude settings as " + "they can only be applied to string fields. Use an array of values for include/exclude clauses")); @@ -108,14 +106,14 @@ public void testBadIncludeExclude() throws IOException { public void testBadUserValueTypeHint() throws IOException { IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(BINARY_FIELD), - agg -> fail("test should have failed with exception"), CoreValuesSourceType.NUMERIC // numeric type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.ValueType.NUMERIC // numeric type hint )); assertThat(e.getMessage(), equalTo("Expected numeric type on field [binary], but got [binary]")); } private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValuesSourceType valueType) throws IOException { + Consumer verify, CoreValuesSourceType.ValueType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java index c080cf565ae3b..8fb4f0959cb8f 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/KeywordTermsAggregatorTests.java @@ -33,8 +33,6 @@ import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -65,7 +63,7 @@ public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(KEYWORD_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.BYTES // with type hint + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.ValueType.STRING // with type hint ); } @@ -93,13 +91,13 @@ public void testMatchAllDocs() throws IOException { assertThat(bucket.getKey(), equalTo(String.valueOf(9L - i))); assertThat(bucket.getDocCount(), equalTo(9L - i)); } - }, CoreValuesSourceType.BYTES // with type hint + }, CoreValuesSourceType.ValueType.STRING // with type hint ); } private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValuesSourceType valueType) throws IOException { + Consumer verify, CoreValuesSourceType.ValueType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java index 7f78ae145f2a2..94b774bd25a16 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/NumericTermsAggregatorTests.java @@ -35,8 +35,6 @@ import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; import java.util.ArrayList; @@ -68,7 +66,7 @@ public void testMatchNoDocs() throws IOException { testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(LONG_FIELD), - agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.NUMERIC // with type hint + agg -> assertEquals(0, agg.getBuckets().size()), CoreValuesSourceType.ValueType.NUMERIC // with type hint ); } @@ -96,7 +94,7 @@ public void testMatchAllDocs() throws IOException { assertThat(bucket.getKey(), equalTo(9L - i)); assertThat(bucket.getDocCount(), equalTo(9L - i)); } - }, CoreValuesSourceType.NUMERIC //with type hint + }, CoreValuesSourceType.ValueType.NUMERIC //with type hint ); } @@ -117,7 +115,7 @@ public void testBadIncludeExclude() throws IOException { e = expectThrows(AggregationExecutionException.class, () -> testSearchCase(new MatchNoDocsQuery(), dataset, aggregation -> aggregation.field(LONG_FIELD).includeExclude(includeExclude).format("yyyy-MM-dd"), - agg -> fail("test should have failed with exception"), CoreValuesSourceType.NUMERIC // with type hint + agg -> fail("test should have failed with exception"), CoreValuesSourceType.ValueType.NUMERIC // with type hint )); assertThat(e.getMessage(), equalTo("Aggregation [_name] cannot support regular expression style " + "include/exclude settings as they can only be applied to string fields. Use an array of numeric " + @@ -127,7 +125,7 @@ public void testBadIncludeExclude() throws IOException { private void testSearchCase(Query query, List dataset, Consumer configure, - Consumer verify, ValuesSourceType valueType) throws IOException { + Consumer verify, CoreValuesSourceType.ValueType valueType) throws IOException { try (Directory directory = newDirectory()) { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { Document document = new Document(); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java index 47b1176329a99..1ccb159ffa9e4 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java @@ -91,7 +91,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.sort.FieldSortBuilder; @@ -180,7 +179,7 @@ public void testUsesGlobalOrdinalsByDefault() throws Exception { // We do not use LuceneTestCase.newSearcher because we need a DirectoryReader IndexSearcher indexSearcher = new IndexSearcher(indexReader); - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("string"); MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType("string"); @@ -248,7 +247,7 @@ public void testSimple() throws Exception { IndexSearcher indexSearcher = newIndexSearcher(indexReader); for (TermsAggregatorFactory.ExecutionMode executionMode : TermsAggregatorFactory.ExecutionMode.values()) { TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionMode.toString()) .field("string") .order(BucketOrder.key(true)); @@ -316,7 +315,7 @@ public void testStringIncludeExclude() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null)) .field("mv_field") @@ -352,7 +351,7 @@ public void testStringIncludeExclude() throws Exception { assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); MappedFieldType fieldType2 = new KeywordFieldMapper.KeywordFieldType("sv_field"); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null)) .field("sv_field") @@ -376,7 +375,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(4).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", "(val000|val001)")) .field("mv_field") @@ -406,7 +405,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(7).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, "val00.+")) .field("mv_field") @@ -423,7 +422,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude(new String[]{"val000", "val010"}, null)) .field("mv_field") @@ -440,7 +439,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new String[]{"val001", "val002", "val003", "val004", "val005", "val006", "val007", "val008", "val009", "val011"})) @@ -458,7 +457,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude("val00.+", null, null, new String[]{"val001", "val002", "val003", "val004", "val005", "val006", "val007", "val008"})) @@ -476,7 +475,7 @@ public void testStringIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.BYTES) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, "val01.+", new String[]{"val001", "val002", "val010"}, null)) @@ -532,7 +531,7 @@ public void testNumericIncludeExclude() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(CoreValuesSourceType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .executionHint(executionHint) .includeExclude(new IncludeExclude(new long[]{0, 5}, null)) .field("long_field") @@ -549,7 +548,7 @@ public void testNumericIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new long[]{0, 5})) .field("long_field") @@ -572,7 +571,7 @@ public void testNumericIncludeExclude() throws Exception { fieldType = new NumberFieldMapper.NumberFieldType("double_field", NumberFieldMapper.NumberType.DOUBLE); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.DOUBLE) .executionHint(executionHint) .includeExclude(new IncludeExclude(new double[]{0.0, 5.0}, null)) .field("double_field") @@ -589,7 +588,7 @@ public void testNumericIncludeExclude() throws Exception { assertEquals(1L, result.getBuckets().get(1).getDocCount()); assertTrue(AggregationInspectionHelper.hasValue((InternalTerms)result)); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.DOUBLE) .executionHint(executionHint) .includeExclude(new IncludeExclude(null, new double[]{0.0, 5.0})) .field("double_field") @@ -623,9 +622,9 @@ public void testStringTermsAggregator() throws Exception { } }; MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType("field"); - termsAggregator(CoreValuesSourceType.BYTES, fieldType, i -> Integer.toString(i), + termsAggregator(CoreValuesSourceType.ValueType.STRING, fieldType, i -> Integer.toString(i), String::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.BYTES, fieldType, i -> Integer.toString(i), + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.ValueType.STRING, fieldType, i -> Integer.toString(i), val -> new SortedDocValuesField("field", new BytesRef(val))); } @@ -639,8 +638,8 @@ public void testLongTermsAggregator() throws Exception { }; MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("field", NumberFieldMapper.NumberType.LONG); - termsAggregator(CoreValuesSourceType.NUMERIC, fieldType, Integer::longValue, Long::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.NUMERIC, fieldType, Integer::longValue, val -> new NumericDocValuesField("field", val)); + termsAggregator(CoreValuesSourceType.ValueType.LONG, fieldType, Integer::longValue, Long::compareTo, luceneFieldFactory); + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.ValueType.LONG, fieldType, Integer::longValue, val -> new NumericDocValuesField("field", val)); } public void testDoubleTermsAggregator() throws Exception { @@ -653,8 +652,8 @@ public void testDoubleTermsAggregator() throws Exception { }; MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("field", NumberFieldMapper.NumberType.DOUBLE); - termsAggregator(CoreValuesSourceType.NUMERIC, fieldType, Integer::doubleValue, Double::compareTo, luceneFieldFactory); - termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.NUMERIC, fieldType, Integer::doubleValue, + termsAggregator(CoreValuesSourceType.ValueType.DOUBLE, fieldType, Integer::doubleValue, Double::compareTo, luceneFieldFactory); + termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.ValueType.DOUBLE, fieldType, Integer::doubleValue, val -> new NumericDocValuesField("field", Double.doubleToRawLongBits(val))); } @@ -672,11 +671,11 @@ public void testIpTermsAggregator() throws Exception { BytesRef b2 = new BytesRef(InetAddressPoint.encode(o2)); return b1.compareTo(b2); }; - termsAggregator(CoreValuesSourceType.IP, new IpFieldMapper.IpFieldType("field"), i -> base[0] = InetAddressPoint.nextUp(base[0]), + termsAggregator(CoreValuesSourceType.ValueType.IP, new IpFieldMapper.IpFieldType("field"), i -> base[0] = InetAddressPoint.nextUp(base[0]), comparator, luceneFieldFactory); } - private void termsAggregator(ValuesSourceType valueType, MappedFieldType fieldType, + private void termsAggregator(CoreValuesSourceType.ValueType valueType, MappedFieldType fieldType, Function valueFactory, Comparator keyComparator, BiFunction luceneFieldFactory) throws Exception { final Map counts = new HashMap<>(); @@ -769,7 +768,7 @@ private void termsAggregator(ValuesSourceType valueType, MappedFieldType fie for (int i = 0; i < size; i++) { Map.Entry expected = expectedBuckets.get(i); Terms.Bucket actual = result.getBuckets().get(i); - if (valueType == CoreValuesSourceType.IP) { + if (valueType == CoreValuesSourceType.ValueType.IP) { assertEquals(String.valueOf(expected.getKey()).substring(1), actual.getKey()); } else { assertEquals(expected.getKey(), actual.getKey()); @@ -800,7 +799,7 @@ private void termsAggregator(ValuesSourceType valueType, MappedFieldType fie assertEquals(expectedFilteredCounts, result.getBuckets().size()); for (Terms.Bucket actual : result.getBuckets()) { Integer expectedCount; - if (valueType == CoreValuesSourceType.IP) { + if (valueType == CoreValuesSourceType.ValueType.IP) { expectedCount = filteredCounts.get(InetAddresses.forString((String)actual.getKey())); } else { expectedCount = filteredCounts.get(actual.getKey()); @@ -813,7 +812,7 @@ private void termsAggregator(ValuesSourceType valueType, MappedFieldType fie } } - private void termsAggregatorWithNestedMaxAgg(ValuesSourceType valueType, MappedFieldType fieldType, + private void termsAggregatorWithNestedMaxAgg(CoreValuesSourceType.ValueType valueType, MappedFieldType fieldType, Function valueFactory, Function luceneFieldFactory) throws Exception { final Map counts = new HashMap<>(); @@ -886,7 +885,7 @@ public void testEmpty() throws Exception { try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { IndexSearcher indexSearcher = newIndexSearcher(indexReader); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("string"); SearchContext context = createSearchContext(indexSearcher, null, fieldType1); Aggregator aggregator = createAggregator(aggregationBuilder, context); @@ -896,7 +895,7 @@ public void testEmpty() throws Exception { assertEquals("_name", result.getName()); assertEquals(0, result.getBuckets().size()); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC).field("long"); + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.LONG).field("long"); context = createSearchContext(indexSearcher, null, fieldType2); aggregator = createAggregator(aggregationBuilder, context); aggregator.preCollection(); @@ -905,7 +904,7 @@ public void testEmpty() throws Exception { assertEquals("_name", result.getName()); assertEquals(0, result.getBuckets().size()); - aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC).field("double"); + aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.DOUBLE).field("double"); context = createSearchContext(indexSearcher, null, fieldType3); aggregator = createAggregator(aggregationBuilder, context); aggregator.preCollection(); @@ -923,7 +922,7 @@ public void testUnmapped() throws Exception { try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { IndexSearcher indexSearcher = newIndexSearcher(indexReader); - ValuesSourceType[] valueTypes = new ValuesSourceType[]{CoreValuesSourceType.BYTES, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC}; + CoreValuesSourceType.ValueType[] valueTypes = new CoreValuesSourceType.ValueType[]{CoreValuesSourceType.ValueType.STRING, CoreValuesSourceType.ValueType.LONG, CoreValuesSourceType.ValueType.DOUBLE}; String[] fieldNames = new String[]{"string", "long", "double"}; for (int i = 0; i < fieldNames.length; i++) { TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name") @@ -956,7 +955,7 @@ public void testUnmappedWithMissing() throws Exception { MappedFieldType fieldType1 = new KeywordFieldMapper.KeywordFieldType("unrelated_value"); IndexSearcher indexSearcher = newIndexSearcher(indexReader); - ValuesSourceType[] valueTypes = new ValuesSourceType[]{CoreValuesSourceType.BYTES, CoreValuesSourceType.NUMERIC, CoreValuesSourceType.NUMERIC}; + CoreValuesSourceType.ValueType[] valueTypes = new CoreValuesSourceType.ValueType[]{CoreValuesSourceType.ValueType.STRING, CoreValuesSourceType.ValueType.LONG, CoreValuesSourceType.ValueType.DOUBLE}; String[] fieldNames = new String[]{"string", "long", "double"}; Object[] missingValues = new Object[]{"abc", 19L, 19.2}; @@ -1071,12 +1070,12 @@ public void testNestedTermsAgg() throws Exception { String executionHint = randomFrom(TermsAggregatorFactory.ExecutionMode.values()).toString(); Aggregator.SubAggCollectionMode collectionMode = randomFrom(Aggregator.SubAggCollectionMode.values()); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name1") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .collectMode(collectionMode) .field("field1") .order(BucketOrder.key(true)) - .subAggregation(new TermsAggregationBuilder("_name2").userValueTypeHint(CoreValuesSourceType.BYTES) + .subAggregation(new TermsAggregationBuilder("_name2").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .collectMode(collectionMode) .field("field2") @@ -1110,7 +1109,7 @@ public void testNestedTermsAgg() throws Exception { public void testMixLongAndDouble() throws Exception { for (TermsAggregatorFactory.ExecutionMode executionMode : TermsAggregatorFactory.ExecutionMode.values()) { - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.NUMERIC) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("_name").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .executionHint(executionMode.toString()) .field("number") .order(BucketOrder.key(true)); @@ -1178,13 +1177,13 @@ public void testGlobalAggregationWithScore() throws IOException { Aggregator.SubAggCollectionMode collectionMode = randomFrom(Aggregator.SubAggCollectionMode.values()); GlobalAggregationBuilder globalBuilder = new GlobalAggregationBuilder("global") .subAggregation( - new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .collectMode(collectionMode) .field("keyword") .order(BucketOrder.key(true)) .subAggregation( - new TermsAggregationBuilder("sub_terms").userValueTypeHint(CoreValuesSourceType.BYTES) + new TermsAggregationBuilder("sub_terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .executionHint(executionHint) .collectMode(collectionMode) .field("keyword").order(BucketOrder.key(true)) @@ -1229,7 +1228,7 @@ public void testWithNestedAggregations() throws IOException { for (Aggregator.SubAggCollectionMode mode : Aggregator.SubAggCollectionMode.values()) { for (boolean withScore : new boolean[]{true, false}) { NestedAggregationBuilder nested = new NestedAggregationBuilder("nested", "nested_object") - .subAggregation(new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) + .subAggregation(new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .field("nested_value") // force the breadth_first mode .collectMode(mode) @@ -1273,7 +1272,7 @@ public void testNumberToStringValueScript() throws IOException { = new NumberFieldMapper.NumberFieldType("number", NumberFieldMapper.NumberType.INTEGER); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("name") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("number") .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, STRING_SCRIPT_NAME, Collections.emptyMap())); @@ -1401,7 +1400,7 @@ public void testOrderByPipelineAggregation() throws Exception { "script", new Script("2.718")); TermsAggregationBuilder termsAgg = terms("terms") .field("field") - .userValueTypeHint(CoreValuesSourceType.BYTES) + .userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .order(BucketOrder.aggregation("script", true)) .subAggregation(bucketScriptAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java index 96ed5fa92a595..c9d6c52c94a1c 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/AvgAggregatorTests.java @@ -510,7 +510,7 @@ public void testMultiValuedFieldWithValueScript() throws IOException { public void testOrderByEmptyAggregation() throws IOException { MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("value", NumberFieldMapper.NumberType.INTEGER); - AggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) + AggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.NUMERIC) .field("value") .order(BucketOrder.compound(BucketOrder.aggregation("filter>avg", true))) .subAggregation(AggregationBuilders.filter("filter", termQuery("value", 100)) diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java index a443c1a8f67b8..32f674294fdde 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/MaxAggregatorTests.java @@ -72,7 +72,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.lookup.LeafDocLookup; @@ -730,7 +729,7 @@ public void testEmptyAggregation() throws Exception { public void testOrderByEmptyAggregation() throws IOException { MappedFieldType fieldType = new NumberFieldMapper.NumberFieldType("value", NumberFieldMapper.NumberType.INTEGER); - TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) + TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.NUMERIC) .field("value") .order(BucketOrder.compound(BucketOrder.aggregation("filter>max", true))) .subAggregation(AggregationBuilders.filter("filter", termQuery("value", 100)) @@ -843,7 +842,7 @@ public void testNestedEarlyTermination() throws Exception { ValueCountAggregationBuilder countAggregationBuilder = new ValueCountAggregationBuilder("count") .field("values"); TermsAggregationBuilder termsAggregationBuilder = new TermsAggregationBuilder("terms") - .userValueTypeHint(CoreValuesSourceType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.ValueType.NUMERIC) .field("value").collectMode(collectionMode) .subAggregation(new MaxAggregationBuilder("sub_max").field("invalid")); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java index a99a8df2e34ae..a2333c849672c 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountAggregatorTests.java @@ -55,7 +55,6 @@ import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.support.AggregationInspectionHelper; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -114,7 +113,7 @@ protected ScriptService getMockScriptService() { public void testGeoField() throws IOException { - testAggregation(new MatchAllDocsQuery(), ValueType.GEOPOINT, iw -> { + testAggregation(new MatchAllDocsQuery(), CoreValuesSourceType.ValueType.GEOPOINT, iw -> { for (int i = 0; i < 10; i++) { Document document = new Document(); document.add(new LatLonDocValuesField("field", 10, 10)); @@ -124,7 +123,7 @@ public void testGeoField() throws IOException { } public void testDoubleField() throws IOException { - testAggregation(new MatchAllDocsQuery(), ValueType.DOUBLE, iw -> { + testAggregation(new MatchAllDocsQuery(), CoreValuesSourceType.ValueType.DOUBLE, iw -> { for (int i = 0; i < 15; i++) { Document document = new Document(); document.add(new DoubleDocValuesField(FIELD_NAME, 23D)); @@ -134,7 +133,7 @@ public void testDoubleField() throws IOException { } public void testKeyWordField() throws IOException { - testAggregation(new MatchAllDocsQuery(), ValueType.STRING, iw -> { + testAggregation(new MatchAllDocsQuery(), CoreValuesSourceType.ValueType.STRING, iw -> { for (int i = 0; i < 20; i++) { Document document = new Document(); document.add(new SortedSetDocValuesField(FIELD_NAME, new BytesRef("stringValue"))); @@ -145,7 +144,7 @@ public void testKeyWordField() throws IOException { } public void testNoDocs() throws IOException { - for (ValueType valueType : ValueType.values()) { + for (CoreValuesSourceType.ValueType valueType : CoreValuesSourceType.ValueType.values()) { testAggregation(new MatchAllDocsQuery(), valueType, iw -> { // Intentionally not writing any docs }, count -> { @@ -156,7 +155,7 @@ public void testNoDocs() throws IOException { } public void testNoMatchingField() throws IOException { - testAggregation(new MatchAllDocsQuery(), ValueType.LONG, iw -> { + testAggregation(new MatchAllDocsQuery(), CoreValuesSourceType.ValueType.LONG, iw -> { iw.addDocument(singleton(new SortedNumericDocValuesField("wrong_number", 7))); iw.addDocument(singleton(new SortedNumericDocValuesField("wrong_number", 1))); }, count -> { @@ -166,7 +165,7 @@ public void testNoMatchingField() throws IOException { } public void testSomeMatchesSortedNumericDocValues() throws IOException { - testAggregation(new DocValuesFieldExistsQuery(FIELD_NAME), ValueType.NUMERIC, iw -> { + testAggregation(new DocValuesFieldExistsQuery(FIELD_NAME), CoreValuesSourceType.ValueType.NUMERIC, iw -> { iw.addDocument(singleton(new SortedNumericDocValuesField("wrong_number", 7))); iw.addDocument(singleton(new SortedNumericDocValuesField(FIELD_NAME, 7))); iw.addDocument(singleton(new SortedNumericDocValuesField(FIELD_NAME, 1))); @@ -177,7 +176,7 @@ public void testSomeMatchesSortedNumericDocValues() throws IOException { } public void testSomeMatchesNumericDocValues() throws IOException { - testAggregation(new DocValuesFieldExistsQuery(FIELD_NAME), ValueType.NUMBER, iw -> { + testAggregation(new DocValuesFieldExistsQuery(FIELD_NAME), CoreValuesSourceType.ValueType.NUMBER, iw -> { iw.addDocument(singleton(new NumericDocValuesField(FIELD_NAME, 7))); iw.addDocument(singleton(new NumericDocValuesField(FIELD_NAME, 1))); }, count -> { @@ -187,7 +186,7 @@ public void testSomeMatchesNumericDocValues() throws IOException { } public void testQueryFiltering() throws IOException { - testAggregation(IntPoint.newRangeQuery("level", 0, 5), ValueType.STRING, iw -> { + testAggregation(IntPoint.newRangeQuery("level", 0, 5), CoreValuesSourceType.ValueType.STRING, iw -> { iw.addDocument(Arrays.asList(new IntPoint("level", 0), new SortedDocValuesField(FIELD_NAME, new BytesRef("foo")))); iw.addDocument(Arrays.asList(new IntPoint("level", 1), new SortedDocValuesField(FIELD_NAME, new BytesRef("bar")))); iw.addDocument(Arrays.asList(new IntPoint("level", 3), new SortedDocValuesField(FIELD_NAME, new BytesRef("foo")))); @@ -200,7 +199,7 @@ public void testQueryFiltering() throws IOException { } public void testQueryFiltersAll() throws IOException { - testAggregation(IntPoint.newRangeQuery("level", -1, 0), ValueType.STRING, iw -> { + testAggregation(IntPoint.newRangeQuery("level", -1, 0), CoreValuesSourceType.ValueType.STRING, iw -> { iw.addDocument(Arrays.asList(new IntPoint("level", 3), new SortedDocValuesField(FIELD_NAME, new BytesRef("foo")))); iw.addDocument(Arrays.asList(new IntPoint("level", 5), new SortedDocValuesField(FIELD_NAME, new BytesRef("baz")))); }, count -> { @@ -274,7 +273,7 @@ public void testValueScriptNumber() throws IOException { .field(FIELD_NAME) .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, NUMBER_VALUE_SCRIPT, Collections.emptyMap())); - MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, ValueType.NUMERIC); + MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, CoreValuesSourceType.ValueType.NUMERIC); testAggregation(aggregationBuilder, new MatchAllDocsQuery(), iw -> { iw.addDocument(singleton(new NumericDocValuesField(FIELD_NAME, 7))); @@ -290,7 +289,7 @@ public void testSingleScriptNumber() throws IOException { ValueCountAggregationBuilder aggregationBuilder = new ValueCountAggregationBuilder("name") .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, SINGLE_SCRIPT, Collections.emptyMap())); - MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, ValueType.NUMERIC); + MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, CoreValuesSourceType.ValueType.NUMERIC); testAggregation(aggregationBuilder, new MatchAllDocsQuery(), iw -> { Document doc = new Document(); @@ -320,7 +319,7 @@ public void testValueScriptString() throws IOException { .field(FIELD_NAME) .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, STRING_VALUE_SCRIPT, Collections.emptyMap())); - MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, ValueType.STRING); + MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, CoreValuesSourceType.ValueType.STRING); testAggregation(aggregationBuilder, new MatchAllDocsQuery(), iw -> { iw.addDocument(singleton(new SortedDocValuesField(FIELD_NAME, new BytesRef("1")))); @@ -336,7 +335,7 @@ public void testSingleScriptString() throws IOException { ValueCountAggregationBuilder aggregationBuilder = new ValueCountAggregationBuilder("name") .script(new Script(ScriptType.INLINE, MockScriptEngine.NAME, SINGLE_SCRIPT, Collections.emptyMap())); - MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, ValueType.STRING); + MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, CoreValuesSourceType.ValueType.STRING); testAggregation(aggregationBuilder, new MatchAllDocsQuery(), iw -> { Document doc = new Document(); @@ -363,7 +362,7 @@ public void testSingleScriptString() throws IOException { } private void testAggregation(Query query, - ValueType valueType, + CoreValuesSourceType.ValueType valueType, CheckedConsumer indexer, Consumer verify) throws IOException { // Test both with and without the userValueTypeHint @@ -372,14 +371,14 @@ private void testAggregation(Query query, } private void testAggregation(Query query, - ValueType valueType, + CoreValuesSourceType.ValueType valueType, CheckedConsumer indexer, Consumer verify, boolean testWithHint) throws IOException { MappedFieldType fieldType = createMappedFieldType(FIELD_NAME, valueType); ValueCountAggregationBuilder aggregationBuilder = new ValueCountAggregationBuilder("_name"); if (valueType != null && testWithHint) { - aggregationBuilder.userValueTypeHint(valueType.getValuesSourceType()); + aggregationBuilder.userValueTypeHint(valueType); } aggregationBuilder.field(FIELD_NAME); @@ -395,7 +394,7 @@ private void testAggregation( testCase(aggregationBuilder, query, buildIndex, verify, fieldType); } - private static MappedFieldType createMappedFieldType(String name, ValueType valueType) { + private static MappedFieldType createMappedFieldType(String name, CoreValuesSourceType.ValueType valueType) { switch (valueType) { case BOOLEAN: return new BooleanFieldMapper.BooleanFieldType(name); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java index 7172bbb18781d..672b515a163ef 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/weighted_avg/WeightedAvgAggregationBuilderTests.java @@ -67,7 +67,7 @@ protected WeightedAvgAggregationBuilder createTestInstance() { MultiValuesSourceFieldConfig valueConfig = new MultiValuesSourceFieldConfig.Builder().setFieldName("value_field").build(); MultiValuesSourceFieldConfig weightConfig = new MultiValuesSourceFieldConfig.Builder().setFieldName("weight_field").build(); WeightedAvgAggregationBuilder aggregationBuilder = new WeightedAvgAggregationBuilder(aggregationName) - .userValueTypeHint(CoreValuesSourceType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.ValueType.NUMERIC) .value(valueConfig) .weight(weightConfig); return aggregationBuilder; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java index 5b20ade698509..31186109624de 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/AvgBucketTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -40,7 +39,7 @@ protected AvgBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java index e5d499052e13e..a9365ab26d94e 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptAggregatorTests.java @@ -48,7 +48,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.io.IOException; import java.util.Collections; @@ -76,7 +75,7 @@ public void testScript() throws IOException { MappedFieldType fieldType1 = new KeywordFieldMapper.KeywordFieldType("the_field"); FiltersAggregationBuilder filters = new FiltersAggregationBuilder("placeholder", new MatchAllQueryBuilder()) - .subAggregation(new TermsAggregationBuilder("the_terms").userValueTypeHint(CoreValuesSourceType.BYTES).field("the_field") + .subAggregation(new TermsAggregationBuilder("the_terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).field("the_field") .subAggregation(new AvgAggregationBuilder("the_avg").field("number_field"))) .subAggregation(new BucketScriptPipelineAggregationBuilder("bucket_script", Collections.singletonMap("the_avg", "the_terms['test1']>the_avg.value"), diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java index cb8085e24de2a..6931397b35da6 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/ExtendedStatsBucketTests.java @@ -25,7 +25,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -63,7 +62,7 @@ public void testSigmaFromInt() throws Exception { public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java index 5a61b4bbcf776..3bc7a94875806 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MaxBucketTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -40,7 +39,7 @@ protected MaxBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java index efe2661eea3c8..c19534b77eb0d 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/MinBucketTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -40,7 +39,7 @@ protected MinBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java index 624d8a851af79..d8c3909bbd814 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/PercentilesBucketTests.java @@ -25,7 +25,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -67,7 +66,7 @@ public void testPercentsFromMixedArray() throws Exception { public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java index c707d1322db00..4a30c788246c4 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/StatsBucketTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -41,7 +40,7 @@ protected StatsBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(St public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java index 00536f943009f..2f23cf855ce48 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/pipeline/SumBucketTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.search.aggregations.bucket.global.GlobalAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import java.util.HashSet; import java.util.Set; @@ -40,7 +39,7 @@ protected SumBucketPipelineAggregationBuilder doCreateTestAggregatorFactory(Stri public void testValidate() { AggregationBuilder singleBucketAgg = new GlobalAggregationBuilder("global"); - AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES); + AggregationBuilder multiBucketAgg = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); final Set aggBuilders = new HashSet<>(); aggBuilders.add(singleBucketAgg); aggBuilders.add(multiBucketAgg); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java index 15d23e76fb5f7..065e8db8ca58b 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/support/ValuesSourceConfigTests.java @@ -71,13 +71,13 @@ public void testUnmappedKeyword() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.STRING, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Bytes valuesSource = (ValuesSource.Bytes) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "field", null, "abc", null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.STRING, "field", null, "abc", null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Bytes) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedBinaryDocValues values = valuesSource.bytesValues(ctx); @@ -128,13 +128,13 @@ public void testUnmappedLong() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.NUMERIC, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.NUMBER, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Numeric valuesSource = (ValuesSource.Numeric) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.NUMERIC, "field", null, 42, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.NUMBER, "field", null, 42, null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Numeric) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedNumericDocValues values = valuesSource.longValues(ctx); @@ -185,13 +185,13 @@ public void testUnmappedBoolean() throws Exception { MapperService mapperService = createMapperService(mapping(b -> {})); withAggregationContext(mapperService, List.of(source(b -> {})), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BOOLEAN, "field", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.BOOLEAN, "field", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Numeric valuesSource = (ValuesSource.Numeric) config.getValuesSource(); assertNotNull(valuesSource); assertFalse(config.hasValues()); assertFalse(config.alignesWithSearchIndex()); - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BOOLEAN, "field", null, true, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.BOOLEAN, "field", null, true, null, null, CoreValuesSourceType.BYTES); valuesSource = (ValuesSource.Numeric) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); SortedNumericDocValues values = valuesSource.longValues(ctx); @@ -221,7 +221,7 @@ public void testFieldAlias() throws Exception { })); withAggregationContext(mapperService, List.of(source(b -> b.field("field", "value"))), context -> { ValuesSourceConfig config; - config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.BYTES, "alias", null, null, null, null, CoreValuesSourceType.BYTES); + config = ValuesSourceConfig.resolve(context, CoreValuesSourceType.ValueType.STRING, "alias", null, null, null, null, CoreValuesSourceType.BYTES); ValuesSource.Bytes valuesSource = (ValuesSource.Bytes) config.getValuesSource(); LeafReaderContext ctx = context.searcher().getIndexReader().leaves().get(0); diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java index eb6f09900dbeb..6739735ff7d2c 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/aggregations/support/AnalyticsValuesSourceType.java @@ -10,10 +10,7 @@ import org.elasticsearch.script.AggregationScript; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; -import org.elasticsearch.search.aggregations.support.AggregationContext; -import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; +import org.elasticsearch.search.aggregations.support.*; import java.util.Locale; @@ -26,7 +23,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, CoreValuesSourceType.ValueType scriptValueType) { throw new AggregationExecutionException("value source of type [" + this.value() + "] is not supported by scripts"); } diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java index bf16331fe322d..d05e0dabb2266 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/ttest/TTestAggregationBuilder.java @@ -24,7 +24,6 @@ import org.elasticsearch.search.aggregations.support.MultiValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.search.aggregations.support.MultiValuesSourceParseHelper; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -44,7 +43,7 @@ public class TTestAggregationBuilder extends MultiValuesSourceAggregationBuilder ObjectParser.fromBuilder(NAME, TTestAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.ValueType.NUMERIC); MultiValuesSourceParseHelper.declareField(A_FIELD.getPreferredName(), PARSER, true, false, true); MultiValuesSourceParseHelper.declareField(B_FIELD.getPreferredName(), PARSER, true, false, true); PARSER.declareString(TTestAggregationBuilder::testType, TYPE_FIELD); diff --git a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java index e3d949881c32f..c915159f2f243 100644 --- a/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java +++ b/x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/stringstats/StringStatsAggregatorTests.java @@ -36,7 +36,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.lookup.LeafDocLookup; import org.elasticsearch.xpack.analytics.AnalyticsPlugin; @@ -225,9 +224,9 @@ public void testNestedAggregation() throws IOException { textFieldType.setFielddata(true); TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder("terms") - .userValueTypeHint(CoreValuesSourceType.NUMERIC) + .userValueTypeHint(CoreValuesSourceType.ValueType.NUMERIC) .field("value") - .subAggregation(new StringStatsAggregationBuilder("text_stats").field("text").userValueTypeHint(CoreValuesSourceType.BYTES)); + .subAggregation(new StringStatsAggregationBuilder("text_stats").field("text").userValueTypeHint(CoreValuesSourceType.ValueType.STRING)); Directory directory = newDirectory(); RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory); diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java index ffaaec596a17a..341b6ad8babfe 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/aggregations/support/AggregateMetricsValuesSourceType.java @@ -9,10 +9,7 @@ import org.elasticsearch.script.AggregationScript; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.AggregationExecutionException; -import org.elasticsearch.search.aggregations.support.AggregationContext; -import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; +import org.elasticsearch.search.aggregations.support.*; import org.elasticsearch.xpack.aggregatemetric.fielddata.IndexAggregateDoubleMetricFieldData; import java.util.Locale; @@ -26,7 +23,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, CoreValuesSourceType.ValueType scriptValueType) { throw new AggregationExecutionException("Value source of type [" + this.value() + "] is not supported by scripts"); } diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java index 372daab7c340a..0c9836db7102b 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupJobIdentifierUtilTests.java @@ -14,7 +14,6 @@ import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.xpack.core.rollup.RollupField; import org.elasticsearch.xpack.core.rollup.action.RollupJobCaps; @@ -309,7 +308,7 @@ public void testComparableNoTermsVsTerms() { DateHistogramAggregationBuilder builder = new DateHistogramAggregationBuilder("foo").field("foo") .calendarInterval(new DateHistogramInterval("1h")) - .subAggregation(new TermsAggregationBuilder("histo").userValueTypeHint(CoreValuesSourceType.BYTES).field("bar")); + .subAggregation(new TermsAggregationBuilder("histo").userValueTypeHint(CoreValuesSourceType.ValueType.STRING).field("bar")); Set caps = new HashSet<>(2); caps.add(cap); diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java index 32fa5577ab6f9..c8794f234b8de 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupRequestTranslationTests.java @@ -23,7 +23,6 @@ import org.elasticsearch.search.aggregations.metrics.StatsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder; import org.elasticsearch.test.ESTestCase; import org.hamcrest.Matchers; @@ -303,7 +302,7 @@ public void testAvgMetric() { public void testStringTerms() throws IOException { - TermsAggregationBuilder terms = new TermsAggregationBuilder("test_string_terms").userValueTypeHint(CoreValuesSourceType.BYTES); + TermsAggregationBuilder terms = new TermsAggregationBuilder("test_string_terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING); terms.field("foo") .subAggregation(new MaxAggregationBuilder("the_max").field("max_field")) .subAggregation(new AvgAggregationBuilder("the_avg").field("avg_field")); diff --git a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java index 369ddd28186a0..7574bce78f852 100644 --- a/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java +++ b/x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/RollupResponseTranslationTests.java @@ -67,7 +67,6 @@ import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.PipelineTree; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.internal.InternalSearchResponse; import org.elasticsearch.xpack.core.rollup.RollupField; @@ -927,10 +926,10 @@ public void testMetric() throws IOException { public void testUnsupportedMetric() throws IOException { - AggregationBuilder nonRollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.NUMERIC) + AggregationBuilder nonRollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .field("foo"); String fieldName = "foo.max." + RollupField.VALUE; - AggregationBuilder rollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.NUMERIC) + AggregationBuilder rollup = new CardinalityAggregationBuilder("test_metric").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .field(fieldName); MappedFieldType nrFTvalue = new NumberFieldMapper.NumberFieldType("foo", NumberFieldMapper.NumberType.LONG); @@ -955,10 +954,10 @@ public void testUnsupportedMetric() throws IOException { } public void testStringTerms() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("stringField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("stringfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("stringfield.terms." + RollupField.COUNT_FIELD)); @@ -987,10 +986,10 @@ public void testStringTerms() throws IOException { } public void testStringTermsNullValue() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("stringField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.BYTES) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.STRING) .field("stringfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("stringfield.terms." + RollupField.COUNT_FIELD)); @@ -1025,10 +1024,10 @@ public void testStringTermsNullValue() throws IOException { } public void testLongTerms() throws IOException { - TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) + TermsAggregationBuilder nonRollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .field("longField"); - TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.NUMERIC) + TermsAggregationBuilder rollupTerms = new TermsAggregationBuilder("terms").userValueTypeHint(CoreValuesSourceType.ValueType.LONG) .field("longfield.terms." + RollupField.VALUE) .subAggregation(new SumAggregationBuilder("terms." + RollupField.COUNT_FIELD) .field("longfield.terms." + RollupField.COUNT_FIELD)); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java index 0119ae5febd88..5e8fe21083230 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/GeoLineAggregationBuilder.java @@ -22,7 +22,6 @@ import org.elasticsearch.search.aggregations.support.MultiValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.MultiValuesSourceFieldConfig; import org.elasticsearch.search.aggregations.support.MultiValuesSourceParseHelper; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; import org.elasticsearch.search.aggregations.support.ValuesSourceRegistry; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -46,7 +45,7 @@ public class GeoLineAggregationBuilder public static final ObjectParser PARSER = ObjectParser.fromBuilder(NAME, GeoLineAggregationBuilder::new); static { - MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.NUMERIC); + MultiValuesSourceParseHelper.declareCommon(PARSER, true, CoreValuesSourceType.ValueType.NUMERIC); MultiValuesSourceParseHelper.declareField(POINT_FIELD.getPreferredName(), PARSER, true, false, false); MultiValuesSourceParseHelper.declareField(SORT_FIELD.getPreferredName(), PARSER, true, false, false); PARSER.declareString((builder, order) -> builder.sortOrder(SortOrder.fromString(order)), ORDER_FIELD); diff --git a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java index e816df8654637..8472981423f8d 100644 --- a/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java +++ b/x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/support/GeoShapeValuesSourceType.java @@ -14,12 +14,7 @@ import org.elasticsearch.index.fielddata.SortedBinaryDocValues; import org.elasticsearch.script.AggregationScript; import org.elasticsearch.search.DocValueFormat; -import org.elasticsearch.search.aggregations.support.AggregationContext; -import org.elasticsearch.search.aggregations.support.FieldContext; -import org.elasticsearch.search.aggregations.support.MissingValues; -import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceType; +import org.elasticsearch.search.aggregations.support.*; import org.elasticsearch.xpack.spatial.index.fielddata.IndexGeoShapeFieldData; import org.elasticsearch.xpack.spatial.index.fielddata.GeoShapeValues; @@ -39,7 +34,7 @@ public ValuesSource getEmpty() { } @Override - public ValuesSource getScript(AggregationScript.LeafFactory script, ValuesSourceType scriptValueType) { + public ValuesSource getScript(AggregationScript.LeafFactory script, CoreValuesSourceType.ValueType scriptValueType) { // TODO (support scripts) throw new UnsupportedOperationException("geo_shape"); } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java index de3cfa96017b1..7f3d940f57a7d 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/querydsl/agg/GroupByKey.java @@ -7,7 +7,6 @@ import org.elasticsearch.search.aggregations.bucket.composite.CompositeValuesSourceBuilder; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; -import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.xpack.ql.expression.gen.script.ScriptTemplate; import org.elasticsearch.xpack.ql.querydsl.container.Sort.Direction; import org.elasticsearch.xpack.ql.type.DataTypes; @@ -43,21 +42,21 @@ public final CompositeValuesSourceBuilder asValueSource() { if (script != null) { builder.script(script.toPainless()); if (script.outputType().isInteger()) { - builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.LONG); } else if (script.outputType().isRational()) { - builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.DOUBLE); } else if (DataTypes.isString(script.outputType())) { - builder.userValuetypeHint(CoreValuesSourceType.BYTES); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.STRING); } else if (script.outputType() == DATE) { - builder.userValuetypeHint(CoreValuesSourceType.DATE); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.DATE); } else if (script.outputType() == TIME) { - builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.LONG); } else if (script.outputType() == DATETIME) { - builder.userValuetypeHint(CoreValuesSourceType.NUMERIC); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.LONG); } else if (script.outputType() == BOOLEAN) { - builder.userValuetypeHint(CoreValuesSourceType.BOOLEAN); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.BOOLEAN); } else if (script.outputType() == IP) { - builder.userValuetypeHint(CoreValuesSourceType.IP); + builder.userValuetypeHint(CoreValuesSourceType.ValueType.IP); } } // field based