diff --git a/core/src/main/java/org/elasticsearch/index/IndexService.java b/core/src/main/java/org/elasticsearch/index/IndexService.java index e2d2ea4b8fe..5780dc256a5 100644 --- a/core/src/main/java/org/elasticsearch/index/IndexService.java +++ b/core/src/main/java/org/elasticsearch/index/IndexService.java @@ -50,7 +50,6 @@ import org.elasticsearch.index.engine.EngineFactory; import org.elasticsearch.index.fielddata.IndexFieldDataCache; import org.elasticsearch.index.fielddata.IndexFieldDataService; import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.query.ParsedQuery; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.shard.IndexEventListener; @@ -604,11 +603,10 @@ public final class IndexService extends AbstractIndexComponent implements IndexC byte[] filterSource = alias.filter().uncompressed(); try (XContentParser parser = XContentFactory.xContent(filterSource).createParser(filterSource)) { Optional innerQueryBuilder = shardContext.newParseContext(parser).parseInnerQueryBuilder(); - ParsedQuery parsedFilter = null; if (innerQueryBuilder.isPresent()) { - parsedFilter = shardContext.toFilter(innerQueryBuilder.get()); + return shardContext.toFilter(innerQueryBuilder.get()).query(); } - return parsedFilter == null ? null : parsedFilter.query(); + return null; } } catch (IOException ex) { throw new AliasFilterParsingException(shardContext.index(), alias.getAlias(), "Invalid alias filter", ex); diff --git a/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java index 863bdb25c71..052ddd85663 100644 --- a/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java +++ b/core/src/main/java/org/elasticsearch/index/query/BoolQueryBuilder.java @@ -441,9 +441,7 @@ public class BoolQueryBuilder extends AbstractQueryBuilder { luceneQuery = query.toFilter(context); break; } - if (luceneQuery != null) { - booleanQueryBuilder.add(new BooleanClause(luceneQuery, occurs)); - } + booleanQueryBuilder.add(new BooleanClause(luceneQuery, occurs)); } } diff --git a/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java index 3afa4339b5c..3912bcff26e 100644 --- a/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java +++ b/core/src/main/java/org/elasticsearch/index/query/BoostingQueryBuilder.java @@ -208,12 +208,6 @@ public class BoostingQueryBuilder extends AbstractQueryBuilder } } - if (!queriesFound) { - throw new ParsingException(parser.getTokenLocation(), "[dis_max] requires 'queries' field"); + if (!queriesFound || queries.isEmpty()) { + throw new ParsingException(parser.getTokenLocation(), "[dis_max] requires 'queries' field with at least one clause"); } DisMaxQueryBuilder disMaxQuery = new DisMaxQueryBuilder(); @@ -186,10 +186,6 @@ public class DisMaxQueryBuilder extends AbstractQueryBuilder protected Query doToQuery(QueryShardContext context) throws IOException { // return null if there are no queries at all Collection luceneQueries = toQueries(queries, context); - if (luceneQueries.isEmpty()) { - return null; - } - return new DisjunctionMaxQuery(luceneQueries, tieBreaker); } diff --git a/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java b/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java index 410fda41aef..9fb44845f22 100644 --- a/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java +++ b/core/src/main/java/org/elasticsearch/index/query/HasChildQueryBuilder.java @@ -330,9 +330,6 @@ public class HasChildQueryBuilder extends AbstractQueryBuilder try { context.nestedScope().nextLevel(nestedObjectMapper); innerQuery = this.query.toQuery(context); - if (innerQuery == null) { - return null; - } } finally { context.nestedScope().previousLevel(); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregationBuilder.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregationBuilder.java index a973d69da4f..4026f846e6d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregationBuilder.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregationBuilder.java @@ -20,10 +20,10 @@ package org.elasticsearch.search.aggregations.bucket.filter; import org.elasticsearch.common.ParseField; -import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryParseContext; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; @@ -84,8 +84,7 @@ public class FilterAggregationBuilder extends AbstractAggregationBuilder new ParsingException(context.parser().getTokenLocation(), - "filter cannot be null in filter aggregation [{}]", aggregationName)); + QueryBuilder filter = context.parseInnerQueryBuilder().orElse(new MatchAllQueryBuilder()); return new FilterAggregationBuilder(aggregationName, filter); } diff --git a/core/src/test/java/org/elasticsearch/index/query/DisMaxQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/DisMaxQueryBuilderTests.java index 61c786d1b01..f18db46346c 100644 --- a/core/src/test/java/org/elasticsearch/index/query/DisMaxQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/DisMaxQueryBuilderTests.java @@ -25,6 +25,7 @@ import org.apache.lucene.search.DisjunctionMaxQuery; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.elasticsearch.common.ParseFieldMatcher; +import org.elasticsearch.common.ParsingException; import org.elasticsearch.test.AbstractQueryTestCase; import java.io.IOException; @@ -88,25 +89,17 @@ public class DisMaxQueryBuilderTests extends AbstractQueryTestCase parseQuery(queryString, ParseFieldMatcher.EMPTY)); + assertEquals("[dis_max] requires 'queries' field with at least one clause", ex.getMessage()); } public void testIllegalArguments() {