|
@@ -52,8 +52,6 @@ import org.elasticsearch.search.internal.SearchContext;
|
|
|
import org.elasticsearch.search.sort.FieldSortBuilder;
|
|
|
import org.elasticsearch.search.sort.SortOrder;
|
|
|
import org.elasticsearch.test.AbstractQueryTestCase;
|
|
|
-import org.junit.Before;
|
|
|
-import org.junit.BeforeClass;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.Collections;
|
|
@@ -74,6 +72,8 @@ public class HasChildQueryBuilderTests extends AbstractQueryTestCase<HasChildQue
|
|
|
|
|
|
private static String similarity;
|
|
|
|
|
|
+ boolean requiresRewrite = false;
|
|
|
+
|
|
|
@Override
|
|
|
protected void initializeAdditionalMappings(MapperService mapperService) throws IOException {
|
|
|
similarity = randomFrom("classic", "BM25");
|
|
@@ -105,8 +105,14 @@ public class HasChildQueryBuilderTests extends AbstractQueryTestCase<HasChildQue
|
|
|
protected HasChildQueryBuilder doCreateTestQueryBuilder() {
|
|
|
int min = randomIntBetween(0, Integer.MAX_VALUE / 2);
|
|
|
int max = randomIntBetween(min, Integer.MAX_VALUE);
|
|
|
- HasChildQueryBuilder hqb = new HasChildQueryBuilder(CHILD_TYPE,
|
|
|
- RandomQueryBuilder.createQuery(random()),
|
|
|
+
|
|
|
+ QueryBuilder innerQueryBuilder = RandomQueryBuilder.createQuery(random());
|
|
|
+ if (randomBoolean()) {
|
|
|
+ requiresRewrite = true;
|
|
|
+ innerQueryBuilder = new WrapperQueryBuilder(innerQueryBuilder.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ HasChildQueryBuilder hqb = new HasChildQueryBuilder(CHILD_TYPE, innerQueryBuilder,
|
|
|
RandomPicks.randomFrom(random(), ScoreMode.values()));
|
|
|
hqb.minMaxChildren(min, max);
|
|
|
if (randomBoolean()) {
|
|
@@ -127,25 +133,24 @@ public class HasChildQueryBuilderTests extends AbstractQueryTestCase<HasChildQue
|
|
|
assertEquals(queryBuilder.maxChildren(), lpq.getMaxChildren());
|
|
|
assertEquals(queryBuilder.scoreMode(), lpq.getScoreMode()); // WTF is this why do we have two?
|
|
|
if (queryBuilder.innerHit() != null) {
|
|
|
+ // have to rewrite again because the provided queryBuilder hasn't been rewritten (directly returned from
|
|
|
+ // doCreateTestQueryBuilder)
|
|
|
+ queryBuilder = (HasChildQueryBuilder) queryBuilder.rewrite(context);
|
|
|
SearchContext searchContext = SearchContext.current();
|
|
|
assertNotNull(searchContext);
|
|
|
- if (query != null) {
|
|
|
- Map<String, InnerHitBuilder> innerHitBuilders = new HashMap<>();
|
|
|
- InnerHitBuilder.extractInnerHits(queryBuilder, innerHitBuilders);
|
|
|
- for (InnerHitBuilder builder : innerHitBuilders.values()) {
|
|
|
- builder.build(searchContext, searchContext.innerHits());
|
|
|
- }
|
|
|
- assertNotNull(searchContext.innerHits());
|
|
|
- assertEquals(1, searchContext.innerHits().getInnerHits().size());
|
|
|
- assertTrue(searchContext.innerHits().getInnerHits().containsKey(queryBuilder.innerHit().getName()));
|
|
|
- InnerHitsContext.BaseInnerHits innerHits =
|
|
|
- searchContext.innerHits().getInnerHits().get(queryBuilder.innerHit().getName());
|
|
|
- assertEquals(innerHits.size(), queryBuilder.innerHit().getSize());
|
|
|
- assertEquals(innerHits.sort().sort.getSort().length, 1);
|
|
|
- assertEquals(innerHits.sort().sort.getSort()[0].getField(), STRING_FIELD_NAME_2);
|
|
|
- } else {
|
|
|
- assertThat(searchContext.innerHits().getInnerHits().size(), equalTo(0));
|
|
|
+ Map<String, InnerHitBuilder> innerHitBuilders = new HashMap<>();
|
|
|
+ InnerHitBuilder.extractInnerHits(queryBuilder, innerHitBuilders);
|
|
|
+ for (InnerHitBuilder builder : innerHitBuilders.values()) {
|
|
|
+ builder.build(searchContext, searchContext.innerHits());
|
|
|
}
|
|
|
+ assertNotNull(searchContext.innerHits());
|
|
|
+ assertEquals(1, searchContext.innerHits().getInnerHits().size());
|
|
|
+ assertTrue(searchContext.innerHits().getInnerHits().containsKey(queryBuilder.innerHit().getName()));
|
|
|
+ InnerHitsContext.BaseInnerHits innerHits =
|
|
|
+ searchContext.innerHits().getInnerHits().get(queryBuilder.innerHit().getName());
|
|
|
+ assertEquals(innerHits.size(), queryBuilder.innerHit().getSize());
|
|
|
+ assertEquals(innerHits.sort().sort.getSort().length, 1);
|
|
|
+ assertEquals(innerHits.sort().sort.getSort()[0].getField(), STRING_FIELD_NAME_2);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -315,6 +320,17 @@ public class HasChildQueryBuilderTests extends AbstractQueryTestCase<HasChildQue
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void testMustRewrite() throws IOException {
|
|
|
+ try {
|
|
|
+ super.testMustRewrite();
|
|
|
+ } catch (UnsupportedOperationException e) {
|
|
|
+ if (requiresRewrite == false) {
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void testNonDefaultSimilarity() throws Exception {
|
|
|
QueryShardContext shardContext = createShardContext();
|
|
|
HasChildQueryBuilder hasChildQueryBuilder = QueryBuilders.hasChildQuery(CHILD_TYPE, new TermQueryBuilder("custom_string", "value"), ScoreMode.None);
|