@Override @Nullable public Query parse(QueryParseContext parseContext) throws IOException { XContentParser parser = parseContext.parser(); TemplateContext templateContext = parse(parser, QUERY, PARAMS); ExecutableScript executable = this.scriptService.executable( "mustache", templateContext.template(), templateContext.params()); BytesReference querySource = (BytesReference) executable.run(); XContentParser qSourceParser = XContentFactory.xContent(querySource).createParser(querySource); try { final QueryParseContext context = new QueryParseContext(parseContext.index(), parseContext.indexQueryParser); context.reset(qSourceParser); Query result = context.parseInnerQuery(); parser.nextToken(); return result; } finally { qSourceParser.close(); } }