|
9 | 9 | import org.apache.lucene.queries.TermFilter;
|
10 | 10 | import org.apache.lucene.search.*;
|
11 | 11 | import org.apache.lucene.store.Directory;
|
| 12 | +import org.apache.lucene.util.Bits; |
12 | 13 | import org.apache.lucene.util.FixedBitSet;
|
13 | 14 | import org.elasticsearch.common.lucene.Lucene;
|
14 | 15 | import org.elasticsearch.test.ElasticsearchLuceneTestCase;
|
@@ -433,21 +434,36 @@ public void testRandom() throws IOException {
|
433 | 434 | case 6:
|
434 | 435 | case 5:
|
435 | 436 | hasMust = true;
|
436 |
| - clauses[i] = newFilterClause(field, value, MUST, random().nextBoolean()); |
437 |
| - topLevel.add(new BooleanClause(new TermQuery(new Term(String.valueOf(field), String.valueOf(value))), MUST)); |
| 437 | + if (rarely()) { |
| 438 | + clauses[i] = new FilterClause(new EmptyFilter(), MUST); |
| 439 | + topLevel.add(new BooleanClause(new MatchNoDocsQuery(), MUST)); |
| 440 | + } else { |
| 441 | + clauses[i] = newFilterClause(field, value, MUST, random().nextBoolean()); |
| 442 | + topLevel.add(new BooleanClause(new TermQuery(new Term(String.valueOf(field), String.valueOf(value))), MUST)); |
| 443 | + } |
438 | 444 | break;
|
439 | 445 | case 4:
|
440 | 446 | case 3:
|
441 | 447 | case 2:
|
442 | 448 | case 1:
|
443 | 449 | hasShould = true;
|
444 |
| - clauses[i] = newFilterClause(field, value, SHOULD, random().nextBoolean()); |
445 |
| - orQuery.add(new BooleanClause(new TermQuery(new Term(String.valueOf(field), String.valueOf(value))), SHOULD)); |
| 450 | + if (rarely()) { |
| 451 | + clauses[i] = new FilterClause(new EmptyFilter(), SHOULD); |
| 452 | + orQuery.add(new BooleanClause(new MatchNoDocsQuery(), SHOULD)); |
| 453 | + } else { |
| 454 | + clauses[i] = newFilterClause(field, value, SHOULD, random().nextBoolean()); |
| 455 | + orQuery.add(new BooleanClause(new TermQuery(new Term(String.valueOf(field), String.valueOf(value))), SHOULD)); |
| 456 | + } |
446 | 457 | break;
|
447 | 458 | case 0:
|
448 | 459 | hasMustNot = true;
|
449 |
| - clauses[i] = newFilterClause(field, value, MUST_NOT, random().nextBoolean()); |
450 |
| - topLevel.add(new BooleanClause(new TermQuery(new Term(String.valueOf(field), String.valueOf(value))), MUST_NOT)); |
| 460 | + if (rarely()) { |
| 461 | + clauses[i] = new FilterClause(new EmptyFilter(), MUST_NOT); |
| 462 | + topLevel.add(new BooleanClause(new MatchNoDocsQuery(), MUST_NOT)); |
| 463 | + } else { |
| 464 | + clauses[i] = newFilterClause(field, value, MUST_NOT, random().nextBoolean()); |
| 465 | + topLevel.add(new BooleanClause(new TermQuery(new Term(String.valueOf(field), String.valueOf(value))), MUST_NOT)); |
| 466 | + } |
451 | 467 | break;
|
452 | 468 |
|
453 | 469 | }
|
@@ -512,5 +528,21 @@ public String toString() {
|
512 | 528 | }
|
513 | 529 | }
|
514 | 530 |
|
| 531 | + public final class EmptyFilter extends Filter { |
| 532 | + |
| 533 | + @Override |
| 534 | + public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException { |
| 535 | + return random().nextBoolean() ? new Empty() : null; |
| 536 | + } |
| 537 | + |
| 538 | + private class Empty extends DocIdSet { |
| 539 | + |
| 540 | + @Override |
| 541 | + public DocIdSetIterator iterator() throws IOException { |
| 542 | + return null; |
| 543 | + } |
| 544 | + } |
| 545 | + } |
| 546 | + |
515 | 547 | }
|
516 | 548 |
|
0 commit comments