summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn van Groningen <martijn.v.groningen@gmail.com>2017-06-29 23:25:05 +0200
committerMartijn van Groningen <martijn.v.groningen@gmail.com>2017-06-30 13:48:18 +0200
commitc8da7f84a20b836671048749245dba3f2c95dbeb (patch)
treef519b7573beb27feda954d6f299a9b2a53e8a760
parent1fee1045b960ed1a582ff84ddd844e8b11bdfaa5 (diff)
WrapperQueryBuilder should also rewrite the parsed query.
Failing to do so can cause other errors later on during query execution. For example if `WrapperQueryBuilder` wraps a `GeoShapeQueryBuilder` that fetches the shape from an index then it will skip the shape fetching and fail later with the error that no shapes have been fetched.
-rw-r--r--core/src/main/java/org/elasticsearch/index/query/WrapperQueryBuilder.java2
-rw-r--r--core/src/test/java/org/elasticsearch/index/query/BoolQueryBuilderTests.java2
-rw-r--r--core/src/test/java/org/elasticsearch/index/query/WrapperQueryBuilderTests.java20
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