Search in sources :

Example 91 with ParsingException

use of org.elasticsearch.common.ParsingException in project elasticsearch by elastic.

the class TransportValidateQueryAction method shardOperation.

@Override
protected ShardValidateQueryResponse shardOperation(ShardValidateQueryRequest request) throws IOException {
    boolean valid;
    String explanation = null;
    String error = null;
    ShardSearchLocalRequest shardSearchLocalRequest = new ShardSearchLocalRequest(request.shardId(), request.types(), request.nowInMillis(), request.filteringAliases());
    SearchContext searchContext = searchService.createSearchContext(shardSearchLocalRequest, SearchService.NO_TIMEOUT, null);
    try {
        ParsedQuery parsedQuery = searchContext.getQueryShardContext().toQuery(request.query());
        searchContext.parsedQuery(parsedQuery);
        searchContext.preProcess(request.rewrite());
        valid = true;
        explanation = explain(searchContext, request.rewrite());
    } catch (QueryShardException | ParsingException e) {
        valid = false;
        error = e.getDetailedMessage();
    } catch (AssertionError | IOException e) {
        valid = false;
        error = e.getMessage();
    } finally {
        Releasables.close(searchContext);
    }
    return new ShardValidateQueryResponse(request.shardId(), valid, explanation, error);
}
Also used : ShardSearchLocalRequest(org.elasticsearch.search.internal.ShardSearchLocalRequest) ParsedQuery(org.elasticsearch.index.query.ParsedQuery) ParsingException(org.elasticsearch.common.ParsingException) SearchContext(org.elasticsearch.search.internal.SearchContext) QueryShardException(org.elasticsearch.index.query.QueryShardException) IOException(java.io.IOException)

Example 92 with ParsingException

use of org.elasticsearch.common.ParsingException in project elasticsearch by elastic.

the class TermsLookup method parseTermsLookup.

public static TermsLookup parseTermsLookup(XContentParser parser) throws IOException {
    String index = null;
    String type = null;
    String id = null;
    String path = null;
    String routing = null;
    XContentParser.Token token;
    String currentFieldName = "";
    while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
        if (token == XContentParser.Token.FIELD_NAME) {
            currentFieldName = parser.currentName();
        } else if (token.isValue()) {
            switch(currentFieldName) {
                case "index":
                    index = parser.textOrNull();
                    break;
                case "type":
                    type = parser.text();
                    break;
                case "id":
                    id = parser.text();
                    break;
                case "routing":
                    routing = parser.textOrNull();
                    break;
                case "path":
                    path = parser.text();
                    break;
                default:
                    throw new ParsingException(parser.getTokenLocation(), "[" + TermsQueryBuilder.NAME + "] query does not support [" + currentFieldName + "] within lookup element");
            }
        } else {
            throw new ParsingException(parser.getTokenLocation(), "[" + TermsQueryBuilder.NAME + "] unknown token [" + token + "] after [" + currentFieldName + "]");
        }
    }
    return new TermsLookup(index, type, id, path).routing(routing);
}
Also used : ParsingException(org.elasticsearch.common.ParsingException) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 93 with ParsingException

use of org.elasticsearch.common.ParsingException in project elasticsearch by elastic.

the class ValuesSourceParserHelper method declareFields.

private static <VS extends ValuesSource> void declareFields(ObjectParser<? extends ValuesSourceAggregationBuilder<VS, ?>, QueryParseContext> objectParser, boolean scriptable, boolean formattable, boolean timezoneAware, ValueType targetValueType) {
    objectParser.declareField(ValuesSourceAggregationBuilder::field, XContentParser::text, new ParseField("field"), ObjectParser.ValueType.STRING);
    objectParser.declareField(ValuesSourceAggregationBuilder::missing, XContentParser::objectText, new ParseField("missing"), ObjectParser.ValueType.VALUE);
    objectParser.declareField(ValuesSourceAggregationBuilder::valueType, p -> {
        ValueType valueType = ValueType.resolveForScript(p.text());
        if (targetValueType != null && valueType.isNotA(targetValueType)) {
            throw new ParsingException(p.getTokenLocation(), "Aggregation [" + objectParser.getName() + "] was configured with an incompatible value type [" + valueType + "]. It can only work on value of type [" + targetValueType + "]");
        }
        return valueType;
    }, new ParseField("value_type", "valueType"), ObjectParser.ValueType.STRING);
    if (formattable) {
        objectParser.declareField(ValuesSourceAggregationBuilder::format, XContentParser::text, new ParseField("format"), ObjectParser.ValueType.STRING);
    }
    if (scriptable) {
        objectParser.declareField(ValuesSourceAggregationBuilder::script, (parser, context) -> Script.parse(parser), Script.SCRIPT_PARSE_FIELD, ObjectParser.ValueType.OBJECT_OR_STRING);
    }
    if (timezoneAware) {
        objectParser.declareField(ValuesSourceAggregationBuilder::timeZone, p -> {
            if (p.currentToken() == XContentParser.Token.VALUE_STRING) {
                return DateTimeZone.forID(p.text());
            } else {
                return DateTimeZone.forOffsetHours(p.intValue());
            }
        }, TIME_ZONE, ObjectParser.ValueType.LONG);
    }
}
Also used : ParsingException(org.elasticsearch.common.ParsingException) XContentParser(org.elasticsearch.common.xcontent.XContentParser) ParseField(org.elasticsearch.common.ParseField)

Example 94 with ParsingException

use of org.elasticsearch.common.ParsingException in project elasticsearch by elastic.

the class TopHitsAggregationBuilder method parse.

public static TopHitsAggregationBuilder parse(String aggregationName, QueryParseContext context) throws IOException {
    TopHitsAggregationBuilder factory = new TopHitsAggregationBuilder(aggregationName);
    XContentParser.Token token;
    String currentFieldName = null;
    XContentParser parser = context.parser();
    while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
        if (token == XContentParser.Token.FIELD_NAME) {
            currentFieldName = parser.currentName();
        } else if (token.isValue()) {
            if (SearchSourceBuilder.FROM_FIELD.match(currentFieldName)) {
                factory.from(parser.intValue());
            } else if (SearchSourceBuilder.SIZE_FIELD.match(currentFieldName)) {
                factory.size(parser.intValue());
            } else if (SearchSourceBuilder.VERSION_FIELD.match(currentFieldName)) {
                factory.version(parser.booleanValue());
            } else if (SearchSourceBuilder.EXPLAIN_FIELD.match(currentFieldName)) {
                factory.explain(parser.booleanValue());
            } else if (SearchSourceBuilder.TRACK_SCORES_FIELD.match(currentFieldName)) {
                factory.trackScores(parser.booleanValue());
            } else if (SearchSourceBuilder._SOURCE_FIELD.match(currentFieldName)) {
                factory.fetchSource(FetchSourceContext.fromXContent(context.parser()));
            } else if (SearchSourceBuilder.STORED_FIELDS_FIELD.match(currentFieldName)) {
                factory.storedFieldsContext = StoredFieldsContext.fromXContent(SearchSourceBuilder.STORED_FIELDS_FIELD.getPreferredName(), context);
            } else if (SearchSourceBuilder.SORT_FIELD.match(currentFieldName)) {
                factory.sort(parser.text());
            } else {
                throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
            }
        } else if (token == XContentParser.Token.START_OBJECT) {
            if (SearchSourceBuilder._SOURCE_FIELD.match(currentFieldName)) {
                factory.fetchSource(FetchSourceContext.fromXContent(context.parser()));
            } else if (SearchSourceBuilder.SCRIPT_FIELDS_FIELD.match(currentFieldName)) {
                List<ScriptField> scriptFields = new ArrayList<>();
                while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
                    String scriptFieldName = parser.currentName();
                    token = parser.nextToken();
                    if (token == XContentParser.Token.START_OBJECT) {
                        Script script = null;
                        boolean ignoreFailure = false;
                        while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
                            if (token == XContentParser.Token.FIELD_NAME) {
                                currentFieldName = parser.currentName();
                            } else if (token.isValue()) {
                                if (SearchSourceBuilder.SCRIPT_FIELD.match(currentFieldName)) {
                                    script = Script.parse(parser);
                                } else if (SearchSourceBuilder.IGNORE_FAILURE_FIELD.match(currentFieldName)) {
                                    ignoreFailure = parser.booleanValue();
                                } else {
                                    throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
                                }
                            } else if (token == XContentParser.Token.START_OBJECT) {
                                if (SearchSourceBuilder.SCRIPT_FIELD.match(currentFieldName)) {
                                    script = Script.parse(parser);
                                } else {
                                    throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
                                }
                            } else {
                                throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
                            }
                        }
                        scriptFields.add(new ScriptField(scriptFieldName, script, ignoreFailure));
                    } else {
                        throw new ParsingException(parser.getTokenLocation(), "Expected [" + XContentParser.Token.START_OBJECT + "] in [" + currentFieldName + "] but found [" + token + "]", parser.getTokenLocation());
                    }
                }
                factory.scriptFields(scriptFields);
            } else if (SearchSourceBuilder.HIGHLIGHT_FIELD.match(currentFieldName)) {
                factory.highlighter(HighlightBuilder.fromXContent(context));
            } else if (SearchSourceBuilder.SORT_FIELD.match(currentFieldName)) {
                List<SortBuilder<?>> sorts = SortBuilder.fromXContent(context);
                factory.sorts(sorts);
            } else {
                throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
            }
        } else if (token == XContentParser.Token.START_ARRAY) {
            if (SearchSourceBuilder.STORED_FIELDS_FIELD.match(currentFieldName)) {
                factory.storedFieldsContext = StoredFieldsContext.fromXContent(SearchSourceBuilder.STORED_FIELDS_FIELD.getPreferredName(), context);
            } else if (SearchSourceBuilder.DOCVALUE_FIELDS_FIELD.match(currentFieldName)) {
                List<String> fieldDataFields = new ArrayList<>();
                while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                    if (token == XContentParser.Token.VALUE_STRING) {
                        fieldDataFields.add(parser.text());
                    } else {
                        throw new ParsingException(parser.getTokenLocation(), "Expected [" + XContentParser.Token.VALUE_STRING + "] in [" + currentFieldName + "] but found [" + token + "]", parser.getTokenLocation());
                    }
                }
                factory.fieldDataFields(fieldDataFields);
            } else if (SearchSourceBuilder.SORT_FIELD.match(currentFieldName)) {
                List<SortBuilder<?>> sorts = SortBuilder.fromXContent(context);
                factory.sorts(sorts);
            } else if (SearchSourceBuilder._SOURCE_FIELD.match(currentFieldName)) {
                factory.fetchSource(FetchSourceContext.fromXContent(context.parser()));
            } else {
                throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
            }
        } else {
            throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + currentFieldName + "].", parser.getTokenLocation());
        }
    }
    return factory;
}
Also used : SearchScript(org.elasticsearch.script.SearchScript) Script(org.elasticsearch.script.Script) ScriptField(org.elasticsearch.search.builder.SearchSourceBuilder.ScriptField) ParsingException(org.elasticsearch.common.ParsingException) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 95 with ParsingException

use of org.elasticsearch.common.ParsingException in project elasticsearch by elastic.

the class CumulativeSumPipelineAggregationBuilder method parse.

public static CumulativeSumPipelineAggregationBuilder parse(String pipelineAggregatorName, QueryParseContext context) throws IOException {
    XContentParser parser = context.parser();
    XContentParser.Token token;
    String currentFieldName = null;
    String[] bucketsPaths = null;
    String format = null;
    while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
        if (token == XContentParser.Token.FIELD_NAME) {
            currentFieldName = parser.currentName();
        } else if (token == XContentParser.Token.VALUE_STRING) {
            if (FORMAT.match(currentFieldName)) {
                format = parser.text();
            } else if (BUCKETS_PATH.match(currentFieldName)) {
                bucketsPaths = new String[] { parser.text() };
            } else {
                throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + pipelineAggregatorName + "]: [" + currentFieldName + "].");
            }
        } else if (token == XContentParser.Token.START_ARRAY) {
            if (BUCKETS_PATH.match(currentFieldName)) {
                List<String> paths = new ArrayList<>();
                while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                    String path = parser.text();
                    paths.add(path);
                }
                bucketsPaths = paths.toArray(new String[paths.size()]);
            } else {
                throw new ParsingException(parser.getTokenLocation(), "Unknown key for a " + token + " in [" + pipelineAggregatorName + "]: [" + currentFieldName + "].");
            }
        } else {
            throw new ParsingException(parser.getTokenLocation(), "Unexpected token " + token + " in [" + pipelineAggregatorName + "].");
        }
    }
    if (bucketsPaths == null) {
        throw new ParsingException(parser.getTokenLocation(), "Missing required field [" + BUCKETS_PATH.getPreferredName() + "] for derivative aggregation [" + pipelineAggregatorName + "]");
    }
    CumulativeSumPipelineAggregationBuilder factory = new CumulativeSumPipelineAggregationBuilder(pipelineAggregatorName, bucketsPaths[0]);
    if (format != null) {
        factory.format(format);
    }
    return factory;
}
Also used : ParsingException(org.elasticsearch.common.ParsingException) ArrayList(java.util.ArrayList) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Aggregations

ParsingException (org.elasticsearch.common.ParsingException)165 XContentParser (org.elasticsearch.common.xcontent.XContentParser)96 ArrayList (java.util.ArrayList)26 Matchers.containsString (org.hamcrest.Matchers.containsString)22 IOException (java.io.IOException)12 HashMap (java.util.HashMap)10 Token (org.elasticsearch.common.xcontent.XContentParser.Token)9 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)7 Index (org.elasticsearch.index.Index)7 Script (org.elasticsearch.script.Script)7 SearchShardTarget (org.elasticsearch.search.SearchShardTarget)7 List (java.util.List)6 BytesReference (org.elasticsearch.common.bytes.BytesReference)6 QueryParseContext (org.elasticsearch.index.query.QueryParseContext)6 ElasticsearchParseException (org.elasticsearch.ElasticsearchParseException)5 GeoPoint (org.elasticsearch.common.geo.GeoPoint)5 GapPolicy (org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy)5 SearchPhaseExecutionException (org.elasticsearch.action.search.SearchPhaseExecutionException)4 ToXContent (org.elasticsearch.common.xcontent.ToXContent)4 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)4