You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/09/16 21:25:08 UTC
svn commit: r696013 - in /lucene/java/trunk/src:
java/org/apache/lucene/search/spans/SpanScorer.java
test/org/apache/lucene/search/spans/TestSpans.java
Author: mikemccand
Date: Tue Sep 16 12:25:07 2008
New Revision: 696013
URL: http://svn.apache.org/viewvc?rev=696013&view=rev
Log:
LUCENE-1379: fix corner case when Similarity.sloppyFreq() returns 0.0 the last matching doc is skipped
Modified:
lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanScorer.java
lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java
Modified: lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanScorer.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanScorer.java?rev=696013&r1=696012&r2=696013&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanScorer.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanScorer.java Tue Sep 16 12:25:07 2008
@@ -77,12 +77,12 @@
}
doc = spans.doc();
freq = 0.0f;
- while (more && doc == spans.doc()) {
+ do {
int matchLength = spans.end() - spans.start();
freq += getSimilarity().sloppyFreq(matchLength);
more = spans.next();
- }
- return more || (freq != 0);
+ } while (more && (doc == spans.doc()));
+ return true;
}
public int doc() { return doc; }
Modified: lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java?rev=696013&r1=696012&r2=696013&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java Tue Sep 16 12:25:07 2008
@@ -20,6 +20,10 @@
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.CheckHits;
+import org.apache.lucene.search.Similarity;
+import org.apache.lucene.search.DefaultSimilarity;
+import org.apache.lucene.search.Scorer;
+import org.apache.lucene.search.Searcher;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
@@ -355,4 +359,34 @@
tstNextSpans(spans, 11, 5, 6);
assertFalse("final next", spans.next());
}
+
+ public void testSpanScorerZeroSloppyFreq() throws Exception {
+ boolean ordered = true;
+ int slop = 1;
+
+ final Similarity sim = new DefaultSimilarity() {
+ public float sloppyFreq(int distance) {
+ return 0.0f;
+ }
+ };
+
+ SpanNearQuery snq = new SpanNearQuery(
+ new SpanQuery[] {
+ makeSpanTermQuery("t1"),
+ makeSpanTermQuery("t2") },
+ slop,
+ ordered) {
+ public Similarity getSimilarity(Searcher s) {
+ return sim;
+ }
+ };
+
+ Scorer spanScorer = snq.weight(searcher).scorer(searcher.getIndexReader());
+
+ assertTrue("first doc", spanScorer.next());
+ assertEquals("first doc number", spanScorer.doc(), 11);
+ float score = spanScorer.score();
+ assertTrue("first doc score should be zero, " + score, score == 0.0f);
+ assertTrue("no second doc", ! spanScorer.next());
+ }
}