diff options
author | Martijn van Groningen <martijn.v.groningen@gmail.com> | 2016-09-02 19:11:38 +0200 |
---|---|---|
committer | Martijn van Groningen <martijn.v.groningen@gmail.com> | 2016-09-06 18:44:48 +0200 |
commit | 245882cde3e234efcb081107b2182a5b27ebd114 (patch) | |
tree | a74164291aa8ee2eda6333d03e8e12175f54912f /core/src/main/java/org/elasticsearch/search/aggregations/bucket/range | |
parent | 0d7dfcd798232be419b5dcb28b778168aefd1681 (diff) |
* Removed `script.default_lang` setting and made `painless` the hardcoded default script language.
** The default script language is now maintained in `Script` class.
* Added `script.legacy.default_lang` setting that controls the default language for scripts that are stored inside documents (for example percolator queries). This defaults to groovy.
** Added `QueryParseContext#getDefaultScriptLanguage()` that manages the default scripting language. Returns always `painless`, unless loading query/search request in legacy mode then the returns what is configured in `script.legacy.default_lang` setting.
** In the aggregation parsing code added `ParserContext` that also holds the default scripting language like `QueryParseContext`. Most parser don't have access to `QueryParseContext`. This is for scripts in aggregations.
* The `lang` script field is always serialized (toXContent).
Closes #20122
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/aggregations/bucket/range')
3 files changed, 29 insertions, 24 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java index 6ebd413d2d..c8cb2c7671 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java @@ -24,6 +24,7 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; +import org.elasticsearch.search.aggregations.support.XContentParseContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -65,20 +66,21 @@ public class RangeParser extends NumericValuesSourceParser { } @Override - protected boolean token(String aggregationName, String currentFieldName, Token token, XContentParser parser, - ParseFieldMatcher parseFieldMatcher, Map<ParseField, Object> otherOptions) throws IOException { + protected boolean token(String aggregationName, String currentFieldName, Token token, + XContentParseContext context, Map<ParseField, Object> otherOptions) throws IOException { + XContentParser parser = context.getParser(); if (token == XContentParser.Token.START_ARRAY) { - if (parseFieldMatcher.match(currentFieldName, RangeAggregator.RANGES_FIELD)) { + if (context.matchField(currentFieldName, RangeAggregator.RANGES_FIELD)) { List<Range> ranges = new ArrayList<>(); while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - Range range = parseRange(parser, parseFieldMatcher); + Range range = parseRange(parser, context.getParseFieldMatcher()); ranges.add(range); } otherOptions.put(RangeAggregator.RANGES_FIELD, ranges); return true; } } else if (token == XContentParser.Token.VALUE_BOOLEAN) { - if (parseFieldMatcher.match(currentFieldName, RangeAggregator.KEYED_FIELD)) { + if (context.matchField(currentFieldName, RangeAggregator.KEYED_FIELD)) { boolean keyed = parser.booleanValue(); otherOptions.put(RangeAggregator.KEYED_FIELD, keyed); return true; diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java index 16cb909ea0..677731d64e 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java @@ -19,7 +19,6 @@ package org.elasticsearch.search.aggregations.bucket.range.geodistance; import org.elasticsearch.common.ParseField; -import org.elasticsearch.common.ParseFieldMatcher; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.io.stream.StreamInput; @@ -30,6 +29,7 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.GeoPointValuesSourceParser; import org.elasticsearch.search.aggregations.support.GeoPointParser; +import org.elasticsearch.search.aggregations.support.XContentParseContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -110,28 +110,29 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser { } @Override - protected boolean token(String aggregationName, String currentFieldName, Token token, XContentParser parser, - ParseFieldMatcher parseFieldMatcher, Map<ParseField, Object> otherOptions) throws IOException { - if (geoPointParser.token(aggregationName, currentFieldName, token, parser, parseFieldMatcher, otherOptions)) { + protected boolean token(String aggregationName, String currentFieldName, Token token, + XContentParseContext context, Map<ParseField, Object> otherOptions) throws IOException { + XContentParser parser = context.getParser(); + if (geoPointParser.token(aggregationName, currentFieldName, token, parser, context.getParseFieldMatcher(), otherOptions)) { return true; } else if (token == XContentParser.Token.VALUE_STRING) { - if (parseFieldMatcher.match(currentFieldName, UNIT_FIELD)) { + if (context.matchField(currentFieldName, UNIT_FIELD)) { DistanceUnit unit = DistanceUnit.fromString(parser.text()); otherOptions.put(UNIT_FIELD, unit); return true; - } else if (parseFieldMatcher.match(currentFieldName, DISTANCE_TYPE_FIELD)) { + } else if (context.matchField(currentFieldName, DISTANCE_TYPE_FIELD)) { GeoDistance distanceType = GeoDistance.fromString(parser.text()); otherOptions.put(DISTANCE_TYPE_FIELD, distanceType); return true; } } else if (token == XContentParser.Token.VALUE_BOOLEAN) { - if (parseFieldMatcher.match(currentFieldName, RangeAggregator.KEYED_FIELD)) { + if (context.matchField(currentFieldName, RangeAggregator.KEYED_FIELD)) { boolean keyed = parser.booleanValue(); otherOptions.put(RangeAggregator.KEYED_FIELD, keyed); return true; } } else if (token == XContentParser.Token.START_ARRAY) { - if (parseFieldMatcher.match(currentFieldName, RangeAggregator.RANGES_FIELD)) { + if (context.matchField(currentFieldName, RangeAggregator.RANGES_FIELD)) { List<Range> ranges = new ArrayList<>(); while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { String fromAsStr = null; @@ -144,17 +145,17 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser { if (token == XContentParser.Token.FIELD_NAME) { toOrFromOrKey = parser.currentName(); } else if (token == XContentParser.Token.VALUE_NUMBER) { - if (parseFieldMatcher.match(toOrFromOrKey, Range.FROM_FIELD)) { + if (context.matchField(toOrFromOrKey, Range.FROM_FIELD)) { from = parser.doubleValue(); - } else if (parseFieldMatcher.match(toOrFromOrKey, Range.TO_FIELD)) { + } else if (context.matchField(toOrFromOrKey, Range.TO_FIELD)) { to = parser.doubleValue(); } } else if (token == XContentParser.Token.VALUE_STRING) { - if (parseFieldMatcher.match(toOrFromOrKey, Range.KEY_FIELD)) { + if (context.matchField(toOrFromOrKey, Range.KEY_FIELD)) { key = parser.text(); - } else if (parseFieldMatcher.match(toOrFromOrKey, Range.FROM_FIELD)) { + } else if (context.matchField(toOrFromOrKey, Range.FROM_FIELD)) { fromAsStr = parser.text(); - } else if (parseFieldMatcher.match(toOrFromOrKey, Range.TO_FIELD)) { + } else if (context.matchField(toOrFromOrKey, Range.TO_FIELD)) { toAsStr = parser.text(); } } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ip/IpRangeParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ip/IpRangeParser.java index 8445fb2d45..5d95f0dd49 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ip/IpRangeParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ip/IpRangeParser.java @@ -31,6 +31,7 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.BytesValuesSourceParser; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator; import org.elasticsearch.search.aggregations.bucket.range.ip.IpRangeAggregationBuilder.Range; +import org.elasticsearch.search.aggregations.support.XContentParseContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregationBuilder; @@ -102,21 +103,22 @@ public class IpRangeParser extends BytesValuesSourceParser { @Override protected boolean token(String aggregationName, String currentFieldName, - Token token, XContentParser parser, - ParseFieldMatcher parseFieldMatcher, - Map<ParseField, Object> otherOptions) throws IOException { - if (parseFieldMatcher.match(currentFieldName, RangeAggregator.RANGES_FIELD)) { + Token token, + XContentParseContext context, + Map<ParseField, Object> otherOptions) throws IOException { + XContentParser parser = context.getParser(); + if (context.matchField(currentFieldName, RangeAggregator.RANGES_FIELD)) { if (parser.currentToken() != Token.START_ARRAY) { throw new ParsingException(parser.getTokenLocation(), "[ranges] must be passed as an array, but got a " + token); } List<Range> ranges = new ArrayList<>(); while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - Range range = parseRange(parser, parseFieldMatcher); + Range range = parseRange(parser, context.getParseFieldMatcher()); ranges.add(range); } otherOptions.put(RangeAggregator.RANGES_FIELD, ranges); return true; - } else if (parseFieldMatcher.match(parser.currentName(), RangeAggregator.KEYED_FIELD)) { + } else if (context.matchField(parser.currentName(), RangeAggregator.KEYED_FIELD)) { otherOptions.put(RangeAggregator.KEYED_FIELD, parser.booleanValue()); return true; } |