Remove AggregatorParsers
Meant to remove it with e3f77b4795
.
It is no longer used.
This commit is contained in:
parent
e3f77b4795
commit
d623df9372
|
@ -1,192 +0,0 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.elasticsearch.search.aggregations;
|
||||
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.xcontent.ParseFieldRegistry;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* A registry for all the aggregator parser, also servers as the main parser for the aggregations module
|
||||
*/
|
||||
public class AggregatorParsers {
|
||||
public static final Pattern VALID_AGG_NAME = Pattern.compile("[^\\[\\]>]+");
|
||||
|
||||
private final ParseFieldRegistry<Aggregator.Parser> aggregationParserRegistry;
|
||||
private final ParseFieldRegistry<PipelineAggregator.Parser> pipelineAggregationParserRegistry;
|
||||
|
||||
public AggregatorParsers(ParseFieldRegistry<Aggregator.Parser> aggregationParserRegistry,
|
||||
ParseFieldRegistry<PipelineAggregator.Parser> pipelineAggregationParserRegistry) {
|
||||
this.aggregationParserRegistry = aggregationParserRegistry;
|
||||
this.pipelineAggregationParserRegistry = pipelineAggregationParserRegistry;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the parser that is registered under the given aggregation type.
|
||||
*
|
||||
* @param type The aggregation type
|
||||
* @return The parser associated with the given aggregation type or null if it wasn't found.
|
||||
*/
|
||||
public Aggregator.Parser parser(String type) {
|
||||
return aggregationParserRegistry.lookupReturningNullIfNotFound(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the parser that is registered under the given pipeline aggregator type.
|
||||
*
|
||||
* @param type The pipeline aggregator type
|
||||
* @return The parser associated with the given pipeline aggregator type or null if it wasn't found.
|
||||
*/
|
||||
public PipelineAggregator.Parser pipelineParser(String type) {
|
||||
return pipelineAggregationParserRegistry.lookupReturningNullIfNotFound(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the aggregation request recursively generating aggregator factories in turn.
|
||||
*
|
||||
* @param parseContext The parse context.
|
||||
*
|
||||
* @return The parsed aggregator factories.
|
||||
*
|
||||
* @throws IOException When parsing fails for unknown reasons.
|
||||
*/
|
||||
public AggregatorFactories.Builder parseAggregators(QueryParseContext parseContext) throws IOException {
|
||||
return parseAggregators(parseContext, 0);
|
||||
}
|
||||
|
||||
private AggregatorFactories.Builder parseAggregators(QueryParseContext parseContext, int level) throws IOException {
|
||||
Matcher validAggMatcher = VALID_AGG_NAME.matcher("");
|
||||
AggregatorFactories.Builder factories = new AggregatorFactories.Builder();
|
||||
|
||||
XContentParser.Token token = null;
|
||||
XContentParser parser = parseContext.parser();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token != XContentParser.Token.FIELD_NAME) {
|
||||
throw new ParsingException(parser.getTokenLocation(),
|
||||
"Unexpected token " + token + " in [aggs]: aggregations definitions must start with the name of the aggregation.");
|
||||
}
|
||||
final String aggregationName = parser.currentName();
|
||||
if (!validAggMatcher.reset(aggregationName).matches()) {
|
||||
throw new ParsingException(parser.getTokenLocation(), "Invalid aggregation name [" + aggregationName
|
||||
+ "]. Aggregation names must be alpha-numeric and can only contain '_' and '-'");
|
||||
}
|
||||
|
||||
token = parser.nextToken();
|
||||
if (token != XContentParser.Token.START_OBJECT) {
|
||||
throw new ParsingException(parser.getTokenLocation(), "Aggregation definition for [" + aggregationName + " starts with a ["
|
||||
+ token + "], expected a [" + XContentParser.Token.START_OBJECT + "].");
|
||||
}
|
||||
|
||||
AggregationBuilder aggFactory = null;
|
||||
PipelineAggregationBuilder pipelineAggregatorFactory = null;
|
||||
AggregatorFactories.Builder subFactories = null;
|
||||
|
||||
Map<String, Object> metaData = null;
|
||||
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token != XContentParser.Token.FIELD_NAME) {
|
||||
throw new ParsingException(
|
||||
parser.getTokenLocation(), "Expected [" + XContentParser.Token.FIELD_NAME + "] under a ["
|
||||
+ XContentParser.Token.START_OBJECT + "], but got a [" + token + "] in [" + aggregationName + "]",
|
||||
parser.getTokenLocation());
|
||||
}
|
||||
final String fieldName = parser.currentName();
|
||||
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
switch (fieldName) {
|
||||
case "meta":
|
||||
metaData = parser.map();
|
||||
break;
|
||||
case "aggregations":
|
||||
case "aggs":
|
||||
if (subFactories != null) {
|
||||
throw new ParsingException(parser.getTokenLocation(),
|
||||
"Found two sub aggregation definitions under [" + aggregationName + "]");
|
||||
}
|
||||
subFactories = parseAggregators(parseContext, level + 1);
|
||||
break;
|
||||
default:
|
||||
if (aggFactory != null) {
|
||||
throw new ParsingException(parser.getTokenLocation(), "Found two aggregation type definitions in ["
|
||||
+ aggregationName + "]: [" + aggFactory.type + "] and [" + fieldName + "]");
|
||||
}
|
||||
if (pipelineAggregatorFactory != null) {
|
||||
throw new ParsingException(parser.getTokenLocation(), "Found two aggregation type definitions in ["
|
||||
+ aggregationName + "]: [" + pipelineAggregatorFactory + "] and [" + fieldName + "]");
|
||||
}
|
||||
|
||||
Aggregator.Parser aggregatorParser = parser(fieldName);
|
||||
if (aggregatorParser == null) {
|
||||
PipelineAggregator.Parser pipelineAggregatorParser = pipelineParser(fieldName);
|
||||
if (pipelineAggregatorParser == null) {
|
||||
throw new ParsingException(parser.getTokenLocation(),
|
||||
"Could not find aggregator type [" + fieldName + "] in [" + aggregationName + "]");
|
||||
} else {
|
||||
pipelineAggregatorFactory = pipelineAggregatorParser.parse(aggregationName, parseContext);
|
||||
}
|
||||
} else {
|
||||
aggFactory = aggregatorParser.parse(aggregationName, parseContext);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new ParsingException(parser.getTokenLocation(), "Expected [" + XContentParser.Token.START_OBJECT + "] under ["
|
||||
+ fieldName + "], but got a [" + token + "] in [" + aggregationName + "]");
|
||||
}
|
||||
}
|
||||
|
||||
if (aggFactory == null && pipelineAggregatorFactory == null) {
|
||||
throw new ParsingException(parser.getTokenLocation(), "Missing definition for aggregation [" + aggregationName + "]",
|
||||
parser.getTokenLocation());
|
||||
} else if (aggFactory != null) {
|
||||
assert pipelineAggregatorFactory == null;
|
||||
if (metaData != null) {
|
||||
aggFactory.setMetaData(metaData);
|
||||
}
|
||||
|
||||
if (subFactories != null) {
|
||||
aggFactory.subAggregations(subFactories);
|
||||
}
|
||||
|
||||
factories.addAggregator(aggFactory);
|
||||
} else {
|
||||
assert pipelineAggregatorFactory != null;
|
||||
if (subFactories != null) {
|
||||
throw new ParsingException(parser.getTokenLocation(),
|
||||
"Aggregation [" + aggregationName + "] cannot define sub-aggregations",
|
||||
parser.getTokenLocation());
|
||||
}
|
||||
if (metaData != null) {
|
||||
pipelineAggregatorFactory.setMetaData(metaData);
|
||||
}
|
||||
factories.addPipelineAggregator(pipelineAggregatorFactory);
|
||||
}
|
||||
}
|
||||
|
||||
return factories;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue