File tree Expand file tree Collapse file tree 2 files changed +22
-0
lines changed
main/java/org/elasticsearch/index/query
test/java/org/elasticsearch/index/query Expand file tree Collapse file tree 2 files changed +22
-0
lines changed Original file line number Diff line number Diff line change @@ -417,12 +417,19 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryRewriteContext) throws
417
417
changed |= rewriteClauses (queryRewriteContext , mustNotClauses , newBuilder ::mustNot );
418
418
changed |= rewriteClauses (queryRewriteContext , filterClauses , newBuilder ::filter );
419
419
changed |= rewriteClauses (queryRewriteContext , shouldClauses , newBuilder ::should );
420
+ // early termination when must clause is empty and optional clauses is returning MatchNoneQueryBuilder
421
+ if (mustClauses .size () == 0 && filterClauses .size () == 0 && shouldClauses .size () > 0
422
+ && newBuilder .shouldClauses .stream ().allMatch (b -> b instanceof MatchNoneQueryBuilder )) {
423
+ return new MatchNoneQueryBuilder ();
424
+ }
425
+
420
426
// lets do some early termination and prevent any kind of rewriting if we have a mandatory query that is a MatchNoneQueryBuilder
421
427
Optional <QueryBuilder > any = Stream .concat (newBuilder .mustClauses .stream (), newBuilder .filterClauses .stream ())
422
428
.filter (b -> b instanceof MatchNoneQueryBuilder ).findAny ();
423
429
if (any .isPresent ()) {
424
430
return any .get ();
425
431
}
432
+
426
433
if (changed ) {
427
434
newBuilder .adjustPureNegative = adjustPureNegative ;
428
435
newBuilder .minimumShouldMatch = minimumShouldMatch ;
Original file line number Diff line number Diff line change @@ -371,5 +371,20 @@ public void testRewriteWithMatchNone() throws IOException {
371
371
.filter (new MatchNoneQueryBuilder ()));
372
372
rewritten = Rewriteable .rewrite (boolQueryBuilder , createShardContext ());
373
373
assertEquals (new MatchNoneQueryBuilder (), rewritten );
374
+
375
+ boolQueryBuilder = new BoolQueryBuilder ();
376
+ boolQueryBuilder .should (new WrapperQueryBuilder (new MatchNoneQueryBuilder ().toString ()));
377
+ rewritten = Rewriteable .rewrite (boolQueryBuilder , createShardContext ());
378
+ assertEquals (new MatchNoneQueryBuilder (), rewritten );
379
+
380
+ boolQueryBuilder = new BoolQueryBuilder ();
381
+ boolQueryBuilder .should (new TermQueryBuilder ("foo" , "bar" ));
382
+ boolQueryBuilder .should (new WrapperQueryBuilder (new MatchNoneQueryBuilder ().toString ()));
383
+ rewritten = Rewriteable .rewrite (boolQueryBuilder , createShardContext ());
384
+ assertNotEquals (new MatchNoneQueryBuilder (), rewritten );
385
+
386
+ boolQueryBuilder = new BoolQueryBuilder ();
387
+ rewritten = Rewriteable .rewrite (boolQueryBuilder , createShardContext ());
388
+ assertNotEquals (new MatchNoneQueryBuilder (), rewritten );
374
389
}
375
390
}
You can’t perform that action at this time.
0 commit comments