You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2013/01/30 10:10:24 UTC
svn commit: r1440309 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/codecs/compressing/
lucene/core/src/java/org/apache/lucene/codecs/lucene40/
lucene/core/src/test/org/apache/lucene/index/
Author: jpountz
Date: Wed Jan 30 09:10:24 2013
New Revision: 1440309
URL: http://svn.apache.org/viewvc?rev=1440309&view=rev
Log:
LUCENE-4732: Fixed TermsEnum.seekCeil/seekExact on term vectors (merged from r1440308).
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/lucene/core/ (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1440309&r1=1440308&r2=1440309&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Wed Jan 30 09:10:24 2013
@@ -100,6 +100,9 @@ Bug Fixes
you have a taxonomy index created with such strings, you should rebuild it.
(Michael McCandless, Shai Erera)
+* LUCENE-4732: Fixed TermsEnum.seekCeil/seekExact on term vectors.
+ (Adrien Grand, Robert Muir)
+
======================= Lucene 4.1.0 =======================
Changes in backwards compatibility policy
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java?rev=1440309&r1=1440308&r2=1440309&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java Wed Jan 30 09:10:24 2013
@@ -832,10 +832,18 @@ public final class CompressingTermVector
}
}
// linear scan
- do {
- next();
- } while (ord < numTerms - 1 && term().compareTo(text) < 0);
- return term().equals(text) ? SeekStatus.FOUND : SeekStatus.END;
+ while (true) {
+ final BytesRef term = next();
+ if (term == null) {
+ return SeekStatus.END;
+ }
+ final int cmp = term.compareTo(text);
+ if (cmp > 0) {
+ return SeekStatus.NOT_FOUND;
+ } else if (cmp == 0) {
+ return SeekStatus.FOUND;
+ }
+ }
}
@Override
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java?rev=1440309&r1=1440308&r2=1440309&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java Wed Jan 30 09:10:24 2013
@@ -422,7 +422,7 @@ public class Lucene40TermVectorsReader e
this.storePayloads = storePayloads;
nextTerm = 0;
tvf.seek(tvfFPStart);
- tvfFP = 1+tvfFPStart;
+ tvfFP = tvfFPStart;
positions = null;
startOffsets = null;
endOffsets = null;
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java?rev=1440309&r1=1440308&r2=1440309&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java Wed Jan 30 09:10:24 2013
@@ -30,7 +30,6 @@ import java.util.TreeSet;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.document.Document;
import org.apache.lucene.index.TermsEnum.SeekStatus;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.store.Directory;
@@ -39,6 +38,7 @@ import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.LineFileDocs;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
import org.apache.lucene.util.automaton.AutomatonTestUtil;
import org.apache.lucene.util.automaton.CompiledAutomaton;
import org.apache.lucene.util.automaton.RegExp;
@@ -235,11 +235,11 @@ public class TestDuelingCodecs extends L
private void assertTermsSeeking(Terms leftTerms, Terms rightTerms) throws Exception {
TermsEnum leftEnum = null;
TermsEnum rightEnum = null;
-
+
// just an upper bound
int numTests = atLeast(20);
Random random = random();
-
+
// collect this number of terms from the left side
HashSet<BytesRef> tests = new HashSet<BytesRef>();
int numPasses = 0;
@@ -263,36 +263,50 @@ public class TestDuelingCodecs extends L
byte newbytes[] = new byte[term.length+5];
System.arraycopy(term.bytes, term.offset, newbytes, 5, term.length);
tests.add(new BytesRef(newbytes, 5, term.length));
+ } else if (code == 3) {
+ switch (random().nextInt(3)) {
+ case 0:
+ tests.add(new BytesRef()); // before the first term
+ break;
+ case 1:
+ tests.add(new BytesRef(new byte[] {(byte) 0xFF, (byte) 0xFF})); // past the last term
+ break;
+ case 2:
+ tests.add(new BytesRef(_TestUtil.randomSimpleString(random()))); // random term
+ break;
+ default:
+ throw new AssertionError();
+ }
}
}
numPasses++;
}
-
+
+ rightEnum = rightTerms.iterator(rightEnum);
+
ArrayList<BytesRef> shuffledTests = new ArrayList<BytesRef>(tests);
Collections.shuffle(shuffledTests, random);
-
+
for (BytesRef b : shuffledTests) {
- leftEnum = leftTerms.iterator(leftEnum);
- rightEnum = rightTerms.iterator(rightEnum);
-
- assertEquals(info, leftEnum.seekExact(b, false), rightEnum.seekExact(b, false));
- assertEquals(info, leftEnum.seekExact(b, true), rightEnum.seekExact(b, true));
-
- SeekStatus leftStatus;
- SeekStatus rightStatus;
-
- leftStatus = leftEnum.seekCeil(b, false);
- rightStatus = rightEnum.seekCeil(b, false);
- assertEquals(info, leftStatus, rightStatus);
- if (leftStatus != SeekStatus.END) {
- assertEquals(info, leftEnum.term(), rightEnum.term());
+ if (rarely()) {
+ // reuse the enums
+ leftEnum = leftTerms.iterator(leftEnum);
+ rightEnum = rightTerms.iterator(rightEnum);
}
-
- leftStatus = leftEnum.seekCeil(b, true);
- rightStatus = rightEnum.seekCeil(b, true);
- assertEquals(info, leftStatus, rightStatus);
- if (leftStatus != SeekStatus.END) {
- assertEquals(info, leftEnum.term(), rightEnum.term());
+
+ final boolean useCache = random().nextBoolean();
+ final boolean seekExact = random().nextBoolean();
+
+ if (seekExact) {
+ assertEquals(info, leftEnum.seekExact(b, useCache), rightEnum.seekExact(b, useCache));
+ } else {
+ SeekStatus leftStatus = leftEnum.seekCeil(b, useCache);
+ SeekStatus rightStatus = rightEnum.seekCeil(b, useCache);
+ assertEquals(info, leftStatus, rightStatus);
+ if (leftStatus != SeekStatus.END) {
+ assertEquals(info, leftEnum.term(), rightEnum.term());
+ assertTermStats(leftEnum, rightEnum);
+ }
}
}
}