diff options
Diffstat (limited to 'core/src')
3 files changed, 22 insertions, 2 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java index f0dad4cadd..df765568ea 100644 --- a/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java +++ b/core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java @@ -160,7 +160,7 @@ public class WrapperQueryBuilder extends AbstractQueryBuilder<WrapperQueryBuilde protected QueryBuilder doRewrite(QueryRewriteContext context) throws IOException { try (XContentParser qSourceParser = XContentFactory.xContent(source).createParser(context.getXContentRegistry(), source)) { - final QueryBuilder queryBuilder = parseInnerQueryBuilder(qSourceParser); + final QueryBuilder queryBuilder = parseInnerQueryBuilder(qSourceParser).rewrite(context); if (boost() != DEFAULT_BOOST || queryName() != null) { final BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); boolQueryBuilder.must(queryBuilder); diff --git a/core/src/test/java/org/elasticsearch/index/query/BoolQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/BoolQueryBuilderTests.java index 68d2d369bb..17cb4d0c4f 100644 --- a/core/src/test/java/org/elasticsearch/index/query/BoolQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/BoolQueryBuilderTests.java @@ -409,7 +409,7 @@ public class BoolQueryBuilderTests extends AbstractQueryTestCase<BoolQueryBuilde boolQueryBuilder.must(new WrapperQueryBuilder(new WrapperQueryBuilder(new MatchAllQueryBuilder().toString()).toString())); QueryBuilder rewritten = boolQueryBuilder.rewrite(createShardContext()); BoolQueryBuilder expected = new BoolQueryBuilder(); - expected.must(new WrapperQueryBuilder(new MatchAllQueryBuilder().toString())); + expected.must(new MatchAllQueryBuilder()); assertEquals(expected, rewritten); expected = new BoolQueryBuilder(); diff --git a/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java index 80a62b1316..8299b18dca 100644 --- a/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java @@ -19,9 +19,11 @@ package org.elasticsearch.index.query; +import org.apache.lucene.index.Term; import org.apache.lucene.index.memory.MemoryIndex; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.Query; +import org.apache.lucene.search.TermQuery; import org.elasticsearch.action.support.ToXContentToBytes; import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.bytes.BytesArray; @@ -129,6 +131,24 @@ public class WrapperQueryBuilderTests extends AbstractQueryTestCase<WrapperQuery assertEquals(new BoolQueryBuilder().must(query).boost(3), builder.rewrite(shardContext)); } + public void testRewriteInnerQueryToo() throws IOException { + QueryShardContext shardContext = createShardContext(); + + QueryBuilder qb = new WrapperQueryBuilder( + new WrapperQueryBuilder(new TermQueryBuilder("foo", "bar").toString()).toString() + ); + assertEquals(new TermQuery(new Term("foo", "bar")), qb.rewrite(shardContext).toQuery(shardContext)); + qb = new WrapperQueryBuilder( + new WrapperQueryBuilder( + new WrapperQueryBuilder(new TermQueryBuilder("foo", "bar").toString()).toString() + ).toString() + ); + assertEquals(new TermQuery(new Term("foo", "bar")), qb.rewrite(shardContext).toQuery(shardContext)); + + qb = new WrapperQueryBuilder(new BoolQueryBuilder().toString()); + assertEquals(new MatchAllDocsQuery(), qb.rewrite(shardContext).toQuery(shardContext)); + } + @Override protected Query rewrite(Query query) throws IOException { // WrapperQueryBuilder adds some optimization if the wrapper and query builder have boosts / query names that wraps |