Search in sources :

Example 36 with ElasticsearchParseException

use of org.elasticsearch.ElasticsearchParseException in project elasticsearch by elastic.

the class ScriptHeuristic method parse.

public static SignificanceHeuristic parse(QueryParseContext context) throws IOException, QueryShardException {
    XContentParser parser = context.parser();
    String heuristicName = parser.currentName();
    Script script = null;
    XContentParser.Token token;
    String currentFieldName = null;
    while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
        if (token.equals(XContentParser.Token.FIELD_NAME)) {
            currentFieldName = parser.currentName();
        } else {
            if (Script.SCRIPT_PARSE_FIELD.match(currentFieldName)) {
                script = Script.parse(parser);
            } else {
                throw new ElasticsearchParseException("failed to parse [{}] significance heuristic. unknown object [{}]", heuristicName, currentFieldName);
            }
        }
    }
    if (script == null) {
        throw new ElasticsearchParseException("failed to parse [{}] significance heuristic. no script found in script_heuristic", heuristicName);
    }
    return new ScriptHeuristic(script);
}
Also used : Script(org.elasticsearch.script.Script) ExecutableScript(org.elasticsearch.script.ExecutableScript) ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 37 with ElasticsearchParseException

use of org.elasticsearch.ElasticsearchParseException in project elasticsearch by elastic.

the class MultiGetRequest method parseDocuments.

public static void parseDocuments(XContentParser parser, List<Item> items, @Nullable String defaultIndex, @Nullable String defaultType, @Nullable String[] defaultFields, @Nullable FetchSourceContext defaultFetchSource, @Nullable String defaultRouting, boolean allowExplicitIndex) throws IOException {
    String currentFieldName = null;
    XContentParser.Token token;
    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
        if (token != XContentParser.Token.START_OBJECT) {
            throw new IllegalArgumentException("docs array element should include an object");
        }
        String index = defaultIndex;
        String type = defaultType;
        String id = null;
        String routing = defaultRouting;
        String parent = null;
        List<String> storedFields = null;
        long version = Versions.MATCH_ANY;
        VersionType versionType = VersionType.INTERNAL;
        FetchSourceContext fetchSourceContext = FetchSourceContext.FETCH_SOURCE;
        while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
            if (token == XContentParser.Token.FIELD_NAME) {
                currentFieldName = parser.currentName();
            } else if (token.isValue()) {
                if ("_index".equals(currentFieldName)) {
                    if (!allowExplicitIndex) {
                        throw new IllegalArgumentException("explicit index in multi get is not allowed");
                    }
                    index = parser.text();
                } else if ("_type".equals(currentFieldName)) {
                    type = parser.text();
                } else if ("_id".equals(currentFieldName)) {
                    id = parser.text();
                } else if ("_routing".equals(currentFieldName) || "routing".equals(currentFieldName)) {
                    routing = parser.text();
                } else if ("_parent".equals(currentFieldName) || "parent".equals(currentFieldName)) {
                    parent = parser.text();
                } else if ("fields".equals(currentFieldName)) {
                    throw new ParsingException(parser.getTokenLocation(), "Unsupported field [fields] used, expected [stored_fields] instead");
                } else if ("stored_fields".equals(currentFieldName)) {
                    storedFields = new ArrayList<>();
                    storedFields.add(parser.text());
                } else if ("_version".equals(currentFieldName) || "version".equals(currentFieldName)) {
                    version = parser.longValue();
                } else if ("_version_type".equals(currentFieldName) || "_versionType".equals(currentFieldName) || "version_type".equals(currentFieldName) || "versionType".equals(currentFieldName)) {
                    versionType = VersionType.fromString(parser.text());
                } else if ("_source".equals(currentFieldName)) {
                    // check lenient to avoid interpreting the value as string but parse strict in order to provoke an error early on.
                    if (parser.isBooleanValueLenient()) {
                        fetchSourceContext = new FetchSourceContext(parser.booleanValue(), fetchSourceContext.includes(), fetchSourceContext.excludes());
                    } else if (token == XContentParser.Token.VALUE_STRING) {
                        fetchSourceContext = new FetchSourceContext(fetchSourceContext.fetchSource(), new String[] { parser.text() }, fetchSourceContext.excludes());
                    } else {
                        throw new ElasticsearchParseException("illegal type for _source: [{}]", token);
                    }
                }
            } else if (token == XContentParser.Token.START_ARRAY) {
                if ("fields".equals(currentFieldName)) {
                    throw new ParsingException(parser.getTokenLocation(), "Unsupported field [fields] used, expected [stored_fields] instead");
                } else if ("stored_fields".equals(currentFieldName)) {
                    storedFields = new ArrayList<>();
                    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                        storedFields.add(parser.text());
                    }
                } else if ("_source".equals(currentFieldName)) {
                    ArrayList<String> includes = new ArrayList<>();
                    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                        includes.add(parser.text());
                    }
                    fetchSourceContext = new FetchSourceContext(fetchSourceContext.fetchSource(), includes.toArray(Strings.EMPTY_ARRAY), fetchSourceContext.excludes());
                }
            } else if (token == XContentParser.Token.START_OBJECT) {
                if ("_source".equals(currentFieldName)) {
                    List<String> currentList = null, includes = null, excludes = null;
                    while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
                        if (token == XContentParser.Token.FIELD_NAME) {
                            currentFieldName = parser.currentName();
                            if ("includes".equals(currentFieldName) || "include".equals(currentFieldName)) {
                                currentList = includes != null ? includes : (includes = new ArrayList<>(2));
                            } else if ("excludes".equals(currentFieldName) || "exclude".equals(currentFieldName)) {
                                currentList = excludes != null ? excludes : (excludes = new ArrayList<>(2));
                            } else {
                                throw new ElasticsearchParseException("source definition may not contain [{}]", parser.text());
                            }
                        } else if (token == XContentParser.Token.START_ARRAY) {
                            while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                                currentList.add(parser.text());
                            }
                        } else if (token.isValue()) {
                            currentList.add(parser.text());
                        } else {
                            throw new ElasticsearchParseException("unexpected token while parsing source settings");
                        }
                    }
                    fetchSourceContext = new FetchSourceContext(fetchSourceContext.fetchSource(), includes == null ? Strings.EMPTY_ARRAY : includes.toArray(new String[includes.size()]), excludes == null ? Strings.EMPTY_ARRAY : excludes.toArray(new String[excludes.size()]));
                }
            }
        }
        String[] aFields;
        if (storedFields != null) {
            aFields = storedFields.toArray(new String[storedFields.size()]);
        } else {
            aFields = defaultFields;
        }
        items.add(new Item(index, type, id).routing(routing).storedFields(aFields).parent(parent).version(version).versionType(versionType).fetchSourceContext(fetchSourceContext == FetchSourceContext.FETCH_SOURCE ? defaultFetchSource : fetchSourceContext));
    }
}
Also used : ArrayList(java.util.ArrayList) VersionType(org.elasticsearch.index.VersionType) FetchSourceContext(org.elasticsearch.search.fetch.subphase.FetchSourceContext) ParsingException(org.elasticsearch.common.ParsingException) ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException) ArrayList(java.util.ArrayList) List(java.util.List) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 38 with ElasticsearchParseException

use of org.elasticsearch.ElasticsearchParseException in project elasticsearch by elastic.

the class BlobStoreIndexShardSnapshots method fromXContent.

public static BlobStoreIndexShardSnapshots fromXContent(XContentParser parser) throws IOException {
    XContentParser.Token token = parser.currentToken();
    if (token == null) {
        // New parser
        token = parser.nextToken();
    }
    Map<String, List<String>> snapshotsMap = new HashMap<>();
    Map<String, FileInfo> files = new HashMap<>();
    if (token == XContentParser.Token.START_OBJECT) {
        while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
            if (token != XContentParser.Token.FIELD_NAME) {
                throw new ElasticsearchParseException("unexpected token [{}]", token);
            }
            String currentFieldName = parser.currentName();
            token = parser.nextToken();
            if (token == XContentParser.Token.START_ARRAY) {
                if (ParseFields.FILES.match(currentFieldName) == false) {
                    throw new ElasticsearchParseException("unknown array [{}]", currentFieldName);
                }
                while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
                    FileInfo fileInfo = FileInfo.fromXContent(parser);
                    files.put(fileInfo.name(), fileInfo);
                }
            } else if (token == XContentParser.Token.START_OBJECT) {
                if (ParseFields.SNAPSHOTS.match(currentFieldName) == false) {
                    throw new ElasticsearchParseException("unknown object [{}]", currentFieldName);
                }
                while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
                    if (token != XContentParser.Token.FIELD_NAME) {
                        throw new ElasticsearchParseException("unknown object [{}]", currentFieldName);
                    }
                    String snapshot = parser.currentName();
                    if (parser.nextToken() != XContentParser.Token.START_OBJECT) {
                        throw new ElasticsearchParseException("unknown object [{}]", currentFieldName);
                    }
                    while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
                        if (token == XContentParser.Token.FIELD_NAME) {
                            currentFieldName = parser.currentName();
                            if (parser.nextToken() == XContentParser.Token.START_ARRAY) {
                                if (ParseFields.FILES.match(currentFieldName) == false) {
                                    throw new ElasticsearchParseException("unknown array [{}]", currentFieldName);
                                }
                                List<String> fileNames = new ArrayList<>();
                                while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
                                    fileNames.add(parser.text());
                                }
                                snapshotsMap.put(snapshot, fileNames);
                            }
                        }
                    }
                }
            } else {
                throw new ElasticsearchParseException("unexpected token [{}]", token);
            }
        }
    }
    List<SnapshotFiles> snapshots = new ArrayList<>();
    for (Map.Entry<String, List<String>> entry : snapshotsMap.entrySet()) {
        List<FileInfo> fileInfosBuilder = new ArrayList<>();
        for (String file : entry.getValue()) {
            FileInfo fileInfo = files.get(file);
            assert fileInfo != null;
            fileInfosBuilder.add(fileInfo);
        }
        snapshots.add(new SnapshotFiles(entry.getKey(), Collections.unmodifiableList(fileInfosBuilder)));
    }
    return new BlobStoreIndexShardSnapshots(files, Collections.unmodifiableList(snapshots));
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) FileInfo(org.elasticsearch.index.snapshots.blobstore.BlobStoreIndexShardSnapshot.FileInfo) ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) Collections.unmodifiableMap(java.util.Collections.unmodifiableMap) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Example 39 with ElasticsearchParseException

use of org.elasticsearch.ElasticsearchParseException in project elasticsearch by elastic.

the class PipelineStore method innerUpdatePipelines.

void innerUpdatePipelines(ClusterState previousState, ClusterState state) {
    IngestMetadata ingestMetadata = state.getMetaData().custom(IngestMetadata.TYPE);
    IngestMetadata previousIngestMetadata = previousState.getMetaData().custom(IngestMetadata.TYPE);
    if (Objects.equals(ingestMetadata, previousIngestMetadata)) {
        return;
    }
    Map<String, Pipeline> pipelines = new HashMap<>();
    for (PipelineConfiguration pipeline : ingestMetadata.getPipelines().values()) {
        try {
            pipelines.put(pipeline.getId(), factory.create(pipeline.getId(), pipeline.getConfigAsMap(), processorFactories));
        } catch (ElasticsearchParseException e) {
            throw e;
        } catch (Exception e) {
            throw new ElasticsearchParseException("Error updating pipeline with id [" + pipeline.getId() + "]", e);
        }
    }
    this.pipelines = Collections.unmodifiableMap(pipelines);
}
Also used : HashMap(java.util.HashMap) ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException) ResourceNotFoundException(org.elasticsearch.ResourceNotFoundException) ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException)

Example 40 with ElasticsearchParseException

use of org.elasticsearch.ElasticsearchParseException in project elasticsearch by elastic.

the class MultiTermVectorsRequest method add.

public void add(TermVectorsRequest template, @Nullable XContentParser parser) throws IOException {
    XContentParser.Token token;
    String currentFieldName = null;
    if (parser != null) {
        while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
            if (token == XContentParser.Token.FIELD_NAME) {
                currentFieldName = parser.currentName();
            } else if (token == XContentParser.Token.START_ARRAY) {
                if ("docs".equals(currentFieldName)) {
                    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                        if (token != XContentParser.Token.START_OBJECT) {
                            throw new IllegalArgumentException("docs array element should include an object");
                        }
                        TermVectorsRequest termVectorsRequest = new TermVectorsRequest(template);
                        TermVectorsRequest.parseRequest(termVectorsRequest, parser);
                        add(termVectorsRequest);
                    }
                } else if ("ids".equals(currentFieldName)) {
                    while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
                        if (!token.isValue()) {
                            throw new IllegalArgumentException("ids array element should only contain ids");
                        }
                        ids.add(parser.text());
                    }
                } else {
                    throw new ElasticsearchParseException("no parameter named [{}] and type ARRAY", currentFieldName);
                }
            } else if (token == XContentParser.Token.START_OBJECT && currentFieldName != null) {
                if ("parameters".equals(currentFieldName)) {
                    TermVectorsRequest.parseRequest(template, parser);
                } else {
                    throw new ElasticsearchParseException("no parameter named [{}] and type OBJECT", currentFieldName);
                }
            } else if (currentFieldName != null) {
                throw new ElasticsearchParseException("_mtermvectors: Parameter [{}] not supported", currentFieldName);
            }
        }
    }
    for (String id : ids) {
        TermVectorsRequest curRequest = new TermVectorsRequest(template);
        curRequest.id(id);
        requests.add(curRequest);
    }
}
Also used : ElasticsearchParseException(org.elasticsearch.ElasticsearchParseException) XContentParser(org.elasticsearch.common.xcontent.XContentParser)

Aggregations

ElasticsearchParseException (org.elasticsearch.ElasticsearchParseException)81 XContentParser (org.elasticsearch.common.xcontent.XContentParser)29 HashMap (java.util.HashMap)25 ArrayList (java.util.ArrayList)12 IOException (java.io.IOException)10 Map (java.util.Map)9 Matchers.containsString (org.hamcrest.Matchers.containsString)6 List (java.util.List)5 ParsingException (org.elasticsearch.common.ParsingException)5 GeoPoint (org.elasticsearch.common.geo.GeoPoint)5 IndexMetaData (org.elasticsearch.cluster.metadata.IndexMetaData)4 Token (org.elasticsearch.common.xcontent.XContentParser.Token)4 HashSet (java.util.HashSet)3 PutPipelineRequest (org.elasticsearch.action.ingest.PutPipelineRequest)3 BytesReference (org.elasticsearch.common.bytes.BytesReference)3 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)3 Script (org.elasticsearch.script.Script)3 UncheckedIOException (java.io.UncheckedIOException)2 Set (java.util.Set)2 ParameterizedMessage (org.apache.logging.log4j.message.ParameterizedMessage)2