diff options
author | javanna <cavannaluca@gmail.com> | 2015-10-05 14:50:15 +0200 |
---|---|---|
committer | Luca Cavanna <cavannaluca@gmail.com> | 2015-10-05 14:50:15 +0200 |
commit | 3a0d1841d9dc99b752d13118ea303f1497c28fc0 (patch) | |
tree | 6cb6b7c1ecd952c7a167abf86daa6dfbca8e3431 /core/src/main/java/org/elasticsearch/index | |
parent | e8d74bb9d9093e3a3184bad73fabd9de99772d09 (diff) |
Query refactoring: simplify IndexQueryParserService parse methods and prepare the field for #13859
Relates to #13859
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index')
-rw-r--r-- | core/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java b/core/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java index d4f7491fb1..bbd9f84e81 100644 --- a/core/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java +++ b/core/src/main/java/org/elasticsearch/index/query/IndexQueryParserService.java @@ -197,15 +197,6 @@ public class IndexQueryParserService extends AbstractIndexComponent { } } - @Nullable - public Query parseInnerQuery(QueryShardContext context) throws IOException { - Query query = context.parseContext().parseInnerQueryBuilder().toQuery(context); - if (query == null) { - query = Queries.newMatchNoDocsQuery(); - } - return query; - } - public QueryShardContext getShardContext() { return cache.get(); } @@ -258,16 +249,41 @@ public class IndexQueryParserService extends AbstractIndexComponent { context.reset(parser); try { context.parseFieldMatcher(parseFieldMatcher); - Query query = context.parseContext().parseInnerQueryBuilder().toQuery(context); - if (query == null) { - query = Queries.newMatchNoDocsQuery(); - } + Query query = parseInnerQuery(context); return new ParsedQuery(query, context.copyNamedQueries()); } finally { context.reset(null); } } + public Query parseInnerQuery(QueryShardContext context) throws IOException { + return toQuery(context.parseContext().parseInnerQueryBuilder(), context); + } + + public ParsedQuery toQuery(QueryBuilder<?> queryBuilder) { + QueryShardContext context = cache.get(); + context.reset(); + context.parseFieldMatcher(parseFieldMatcher); + try { + Query query = toQuery(queryBuilder, context); + return new ParsedQuery(query, context.copyNamedQueries()); + } catch(QueryShardException | ParsingException e ) { + throw e; + } catch(Exception e) { + throw new QueryShardException(context, "failed to create query: {}", e, queryBuilder); + } finally { + context.reset(); + } + } + + private static Query toQuery(QueryBuilder<?> queryBuilder, QueryShardContext context) throws IOException { + Query query = queryBuilder.toQuery(context); + if (query == null) { + query = Queries.newMatchNoDocsQuery(); + } + return query; + } + public ParseFieldMatcher parseFieldMatcher() { return parseFieldMatcher; } |