You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/11/17 16:20:50 UTC
svn commit: r1203216 - in /lucene/dev/trunk/lucene/src:
java/org/apache/lucene/index/codecs/
java/org/apache/lucene/index/codecs/simpletext/ test/org/apache/lucene/index/
Author: rmuir
Date: Thu Nov 17 15:20:50 2011
New Revision: 1203216
URL: http://svn.apache.org/viewvc?rev=1203216&view=rev
Log:
LUCENE-3580: fix TVs to obey DISI contract for docID() before next/advance
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsReader.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java
lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTermVectorsReader.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsReader.java?rev=1203216&r1=1203215&r2=1203216&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsReader.java Thu Nov 17 15:20:50 2011
@@ -547,6 +547,7 @@ public class DefaultTermVectorsReader ex
// freq() already by TermsEnum.totalTermFreq
private static class TVDocsEnum extends DocsEnum {
private boolean didNext;
+ private int doc = -1;
private int freq;
private Bits liveDocs;
@@ -557,16 +558,16 @@ public class DefaultTermVectorsReader ex
@Override
public int docID() {
- return 0;
+ return doc;
}
@Override
public int nextDoc() {
if (!didNext && (liveDocs == null || liveDocs.get(0))) {
didNext = true;
- return 0;
+ return (doc = 0);
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
@@ -575,13 +576,14 @@ public class DefaultTermVectorsReader ex
if (!didNext && target == 0) {
return nextDoc();
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
public void reset(Bits liveDocs, int freq) {
this.liveDocs = liveDocs;
this.freq = freq;
+ this.doc = -1;
didNext = false;
}
}
@@ -589,6 +591,7 @@ public class DefaultTermVectorsReader ex
private static class TVDocsAndPositionsEnum extends DocsAndPositionsEnum {
private final OffsetAttribute offsetAtt;
private boolean didNext;
+ private int doc = -1;
private int nextPos;
private Bits liveDocs;
private int[] positions;
@@ -619,16 +622,16 @@ public class DefaultTermVectorsReader ex
@Override
public int docID() {
- return 0;
+ return doc;
}
@Override
public int nextDoc() {
if (!didNext && (liveDocs == null || liveDocs.get(0))) {
didNext = true;
- return 0;
+ return (doc = 0);
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
@@ -637,7 +640,7 @@ public class DefaultTermVectorsReader ex
if (!didNext && target == 0) {
return nextDoc();
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
@@ -647,6 +650,7 @@ public class DefaultTermVectorsReader ex
this.startOffsets = startOffsets;
assert (offsetAtt != null) == (startOffsets != null);
this.endOffsets = endOffsets;
+ this.doc = -1;
didNext = false;
nextPos = 0;
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java?rev=1203216&r1=1203215&r2=1203216&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/simpletext/SimpleTextTermVectorsReader.java Thu Nov 17 15:20:50 2011
@@ -392,6 +392,7 @@ public class SimpleTextTermVectorsReader
// note: these two enum classes are exactly like the Default impl...
private static class SimpleTVDocsEnum extends DocsEnum {
private boolean didNext;
+ private int doc = -1;
private int freq;
private Bits liveDocs;
@@ -402,16 +403,16 @@ public class SimpleTextTermVectorsReader
@Override
public int docID() {
- return 0;
+ return doc;
}
@Override
public int nextDoc() {
if (!didNext && (liveDocs == null || liveDocs.get(0))) {
didNext = true;
- return 0;
+ return (doc = 0);
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
@@ -420,13 +421,14 @@ public class SimpleTextTermVectorsReader
if (!didNext && target == 0) {
return nextDoc();
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
public void reset(Bits liveDocs, int freq) {
this.liveDocs = liveDocs;
this.freq = freq;
+ this.doc = -1;
didNext = false;
}
}
@@ -434,6 +436,7 @@ public class SimpleTextTermVectorsReader
private static class SimpleTVDocsAndPositionsEnum extends DocsAndPositionsEnum {
private final OffsetAttribute offsetAtt;
private boolean didNext;
+ private int doc = -1;
private int nextPos;
private Bits liveDocs;
private int[] positions;
@@ -464,16 +467,16 @@ public class SimpleTextTermVectorsReader
@Override
public int docID() {
- return 0;
+ return doc;
}
@Override
public int nextDoc() {
if (!didNext && (liveDocs == null || liveDocs.get(0))) {
didNext = true;
- return 0;
+ return (doc = 0);
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
@@ -482,7 +485,7 @@ public class SimpleTextTermVectorsReader
if (!didNext && target == 0) {
return nextDoc();
} else {
- return NO_MORE_DOCS;
+ return (doc = NO_MORE_DOCS);
}
}
@@ -492,6 +495,7 @@ public class SimpleTextTermVectorsReader
this.startOffsets = startOffsets;
assert (offsetAtt != null) == (startOffsets != null);
this.endOffsets = endOffsets;
+ this.doc = -1;
didNext = false;
nextPos = 0;
}
Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTermVectorsReader.java?rev=1203216&r1=1203215&r2=1203216&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTermVectorsReader.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTermVectorsReader.java Thu Nov 17 15:20:50 2011
@@ -34,6 +34,7 @@ import org.apache.lucene.document.TextFi
import org.apache.lucene.index.codecs.Codec;
import org.apache.lucene.index.codecs.DefaultTermVectorsReader;
import org.apache.lucene.index.codecs.TermVectorsReader;
+import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
@@ -215,6 +216,33 @@ public class TestTermVectorsReader exten
}
reader.close();
}
+
+ public void testDocsEnum() throws IOException {
+ TermVectorsReader reader = Codec.getDefault().termVectorsFormat().vectorsReader(dir, seg, fieldInfos, newIOContext(random));
+ for (int j = 0; j < 5; j++) {
+ Terms vector = reader.get(j).terms(testFields[0]);
+ assertNotNull(vector);
+ assertEquals(testTerms.length, vector.getUniqueTermCount());
+ TermsEnum termsEnum = vector.iterator(null);
+ DocsEnum docsEnum = null;
+ for (int i = 0; i < testTerms.length; i++) {
+ final BytesRef text = termsEnum.next();
+ assertNotNull(text);
+ String term = text.utf8ToString();
+ //System.out.println("Term: " + term);
+ assertEquals(testTerms[i], term);
+
+ docsEnum = termsEnum.docs(null, docsEnum);
+ assertNotNull(docsEnum);
+ int doc = docsEnum.docID();
+ assertTrue(doc == -1 || doc == DocIdSetIterator.NO_MORE_DOCS);
+ assertTrue(docsEnum.nextDoc() != DocsEnum.NO_MORE_DOCS);
+ assertEquals(DocIdSetIterator.NO_MORE_DOCS, docsEnum.nextDoc());
+ }
+ assertNull(termsEnum.next());
+ }
+ reader.close();
+ }
public void testPositionReader() throws IOException {
TermVectorsReader reader = Codec.getDefault().termVectorsFormat().vectorsReader(dir, seg, fieldInfos, newIOContext(random));
@@ -233,6 +261,8 @@ public class TestTermVectorsReader exten
dpEnum = termsEnum.docsAndPositions(null, dpEnum);
assertNotNull(dpEnum);
+ int doc = dpEnum.docID();
+ assertTrue(doc == -1 || doc == DocIdSetIterator.NO_MORE_DOCS);
assertTrue(dpEnum.nextDoc() != DocsEnum.NO_MORE_DOCS);
assertEquals(dpEnum.freq(), positions[i].length);
for (int j = 0; j < positions[i].length; j++) {
@@ -241,6 +271,8 @@ public class TestTermVectorsReader exten
assertEquals(DocsEnum.NO_MORE_DOCS, dpEnum.nextDoc());
dpEnum = termsEnum.docsAndPositions(null, dpEnum);
+ doc = dpEnum.docID();
+ assertTrue(doc == -1 || doc == DocIdSetIterator.NO_MORE_DOCS);
assertTrue(dpEnum.nextDoc() != DocsEnum.NO_MORE_DOCS);
assertNotNull(dpEnum);
final OffsetAttribute offsetAtt = dpEnum.attributes().getAttribute(OffsetAttribute.class);