File tree 2 files changed +13
-1
lines changed
main/java/org/elasticsearch/search
test/java/org/elasticsearch/search 2 files changed +13
-1
lines changed Original file line number Diff line number Diff line change @@ -850,8 +850,13 @@ public boolean canMatch(ShardSearchRequest request) throws IOException {
850
850
}
851
851
}
852
852
853
+ /**
854
+ * Returns true iff the given search source builder can be early terminated by rewriting to a match none query. Or in other words
855
+ * if the execution of a the search request can be early terminated without executing it. This is for instance not possible if
856
+ * a global aggregation is part of this request or if there is a suggest builder present.
857
+ */
853
858
public static boolean canRewriteToMatchNone (SearchSourceBuilder source ) {
854
- if (source == null || source .query () == null || source .query () instanceof MatchAllQueryBuilder ) {
859
+ if (source == null || source .query () == null || source .query () instanceof MatchAllQueryBuilder || source . suggest () != null ) {
855
860
return false ;
856
861
} else {
857
862
AggregatorFactories .Builder aggregations = source .aggregations ();
Original file line number Diff line number Diff line change 56
56
import org .elasticsearch .search .internal .AliasFilter ;
57
57
import org .elasticsearch .search .internal .SearchContext ;
58
58
import org .elasticsearch .search .internal .ShardSearchLocalRequest ;
59
+ import org .elasticsearch .search .suggest .SuggestBuilder ;
59
60
import org .elasticsearch .test .ESSingleNodeTestCase ;
60
61
61
62
import java .io .IOException ;
@@ -354,5 +355,11 @@ public void testCanRewriteToMatchNone() {
354
355
assertTrue (SearchService .canRewriteToMatchNone (new SearchSourceBuilder ().query (new TermQueryBuilder ("foo" , "bar" ))));
355
356
assertTrue (SearchService .canRewriteToMatchNone (new SearchSourceBuilder ().query (new MatchNoneQueryBuilder ())
356
357
.aggregation (new TermsAggregationBuilder ("test" , ValueType .STRING ).minDocCount (1 ))));
358
+ assertFalse (SearchService .canRewriteToMatchNone (new SearchSourceBuilder ().query (new MatchNoneQueryBuilder ())
359
+ .aggregation (new TermsAggregationBuilder ("test" , ValueType .STRING ).minDocCount (1 ))
360
+ .suggest (new SuggestBuilder ())));
361
+ assertFalse (SearchService .canRewriteToMatchNone (new SearchSourceBuilder ().query (new TermQueryBuilder ("foo" , "bar" ))
362
+ .suggest (new SuggestBuilder ())));
363
+
357
364
}
358
365
}
You can’t perform that action at this time.
0 commit comments