Author: hossman
Date: Thu May 18 00:39:23 2006
New Revision: 407485
URL: http://svn.apache.org/viewvc?rev=407485&view=rev
Log:
fix for LUCENE-352
Modified:
lucene/java/trunk/CHANGES.txt
lucene/java/trunk/src/java/org/apache/lucene/search/spans/
SpanNotQuery.java
lucene/java/trunk/src/test/org/apache/lucene/search/spans/
TestBasics.java
Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?
rev=407485&r1=407484&r2=407485&view=diff
======================================================================
========
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Thu May 18 00:39:23 2006
@@ -54,6 +54,9 @@
10. LUCENE-512: Fixed ClassCastException in
ParallelReader.getTermFreqVectors
(frederic via Yonik)
+11. LUCENE-352: Fixed bug in SpanNotQuery that manifested as
+ NullPointerException when "exclude" query was not a
SpanTermQuery.
+
1.9.1
Bug fixes
Modified: lucene/java/trunk/src/java/org/apache/lucene/search/spans/
SpanNotQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/
apache/lucene/search/spans/SpanNotQuery.java?
rev=407485&r1=407484&r2=407485&view=diff
======================================================================
========
--- lucene/java/trunk/src/java/org/apache/lucene/search/spans/
SpanNotQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/spans/
SpanNotQuery.java Thu May 18 00:39:23 2006
@@ -74,7 +74,7 @@
private boolean moreInclude = true;
private Spans excludeSpans = exclude.getSpans(reader);
- private boolean moreExclude = true;
+ private boolean moreExclude = excludeSpans.next();
public boolean next() throws IOException {
if (moreInclude) // move to next
include
Modified: lucene/java/trunk/src/test/org/apache/lucene/search/spans/
TestBasics.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/
apache/lucene/search/spans/TestBasics.java?
rev=407485&r1=407484&r2=407485&view=diff
======================================================================
========
--- lucene/java/trunk/src/test/org/apache/lucene/search/spans/
TestBasics.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/spans/
TestBasics.java Thu May 18 00:39:23 2006
@@ -160,7 +160,81 @@
assertTrue(searcher.explain(query, 801).getValue() > 0.0f);
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 testNpeInSpanNearWithSpanNot() 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 hun = new SpanTermQuery(new Term("field",
"hundred"));
+ SpanTermQuery term3 = new SpanTermQuery(new Term("field",
"forty"));
+ SpanNearQuery exclude = new SpanNearQuery(new SpanQuery[]
{hun, term3},
+ 1, true);
+
+ SpanNotQuery query = new SpanNotQuery(near, exclude);
+
+ 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 testNpeInSpanNearInSpanFirstInSpanNot() throws
Exception {
+ int n = 5;
+ SpanTermQuery hun = new SpanTermQuery(new Term("field",
"hundred"));
+ SpanTermQuery term40 = new SpanTermQuery(new Term("field",
"forty"));
+ SpanTermQuery term40c = (SpanTermQuery)term40.clone();
+
+ SpanFirstQuery include = new SpanFirstQuery(term40, n);
+ SpanNearQuery near = new SpanNearQuery(new SpanQuery[]{hun,
term40c},
+ n-1, true);
+ SpanFirstQuery exclude = new SpanFirstQuery(near, n-1);
+ SpanNotQuery q = new SpanNotQuery(include, exclude);
+
+ checkHits(q, new int[]{40,41,42,43,44,45,46,47,48,49});
+
+ }
+
public void testSpanFirst() throws Exception {
SpanTermQuery term1 = new SpanTermQuery(new Term("field",
"five"));
SpanFirstQuery query = new SpanFirstQuery(term1, 1);