Index: TestBasics.java =================================================================== --- TestBasics.java (revision 158827) +++ TestBasics.java (working copy) @@ -157,6 +157,44 @@ assertTrue(searcher.explain(query, 891).getValue() > 0.0f); } + public void testSpanWithMultipleNotSingle() throws Exception { + SpanTermQuery term1 = new SpanTermQuery(new Term("field", "eight")); + SpanTermQuery term2 = new SpanTermQuery(new Term("field", "one")); + SpanNearQuery near = new SpanNearQuery(new SpanQuery[] {term1, term2}, + 4, true); + SpanTermQuery term3 = new SpanTermQuery(new Term("field", "forty")); + + SpanOrQuery or = new SpanOrQuery(new SpanQuery[] {term3}); + + SpanNotQuery query = new SpanNotQuery(near, or); + + checkHits(query, new int[] + {801, 821, 831, 851, 861, 871, 881, 891}); + + assertTrue(searcher.explain(query, 801).getValue() > 0.0f); + assertTrue(searcher.explain(query, 891).getValue() > 0.0f); + } + + public void testSpanWithMultipleNotMany() throws Exception { + SpanTermQuery term1 = new SpanTermQuery(new Term("field", "eight")); + SpanTermQuery term2 = new SpanTermQuery(new Term("field", "one")); + SpanNearQuery near = new SpanNearQuery(new SpanQuery[] {term1, term2}, + 4, true); + SpanTermQuery term3 = new SpanTermQuery(new Term("field", "forty")); + SpanTermQuery term4 = new SpanTermQuery(new Term("field", "sixty")); + SpanTermQuery term5 = new SpanTermQuery(new Term("field", "eighty")); + + SpanOrQuery or = new SpanOrQuery(new SpanQuery[] {term3, term4, term5}); + + SpanNotQuery query = new SpanNotQuery(near, or); + + checkHits(query, new int[] + {801, 821, 831, 851, 871, 891}); + + assertTrue(searcher.explain(query, 801).getValue() > 0.0f); + assertTrue(searcher.explain(query, 891).getValue() > 0.0f); + } + public void testSpanFirst() throws Exception { SpanTermQuery term1 = new SpanTermQuery(new Term("field", "five")); SpanFirstQuery query = new SpanFirstQuery(term1, 1);