You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2012/08/21 14:00:51 UTC
svn commit: r1375486 [1/3] - in /lucene/dev/trunk: ./ dev-tools/ lucene/
lucene/analysis/ lucene/analysis/common/ lucene/benchmark/ lucene/core/
lucene/core/src/java/org/apache/lucene/codecs/
lucene/core/src/java/org/apache/lucene/codecs/block/ lucene/...
Author: mikemccand
Date: Tue Aug 21 12:00:48 2012
New Revision: 1375486
URL: http://svn.apache.org/viewvc?rev=1375486&view=rev
Log:
LUCENE-3892: merge BlockPostingsFormat from branch
Added:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/block/
- copied from r1375470, lucene/dev/branches/pforcodec_3892/lucene/core/src/java/org/apache/lucene/codecs/block/
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/block/
- copied from r1375470, lucene/dev/branches/pforcodec_3892/lucene/core/src/test/org/apache/lucene/codecs/block/
Modified:
lucene/dev/trunk/ (props changed)
lucene/dev/trunk/dev-tools/ (props changed)
lucene/dev/trunk/lucene/ (props changed)
lucene/dev/trunk/lucene/CHANGES.txt (contents, props changed)
lucene/dev/trunk/lucene/MIGRATE.txt (props changed)
lucene/dev/trunk/lucene/analysis/ (props changed)
lucene/dev/trunk/lucene/analysis/common/ (props changed)
lucene/dev/trunk/lucene/benchmark/ (props changed)
lucene/dev/trunk/lucene/build.xml (props changed)
lucene/dev/trunk/lucene/common-build.xml (props changed)
lucene/dev/trunk/lucene/core/ (props changed)
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/VariableIntBlockIndexInput.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/IntIndexInput.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepSkipListReader.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/BulkOperation.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/Packed64.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/Packed64SingleBlock.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedInts.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedReaderIterator.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/PackedWriter.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/util/packed/gen_BulkOperation.py
lucene/dev/trunk/lucene/core/src/resources/META-INF/services/org.apache.lucene.codecs.PostingsFormat
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPostingsFormat.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java
lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java
lucene/dev/trunk/lucene/demo/ (props changed)
lucene/dev/trunk/lucene/facet/ (props changed)
lucene/dev/trunk/lucene/grouping/ (props changed)
lucene/dev/trunk/lucene/highlighter/ (props changed)
lucene/dev/trunk/lucene/ivy-settings.xml (props changed)
lucene/dev/trunk/lucene/join/ (props changed)
lucene/dev/trunk/lucene/memory/ (props changed)
lucene/dev/trunk/lucene/misc/ (props changed)
lucene/dev/trunk/lucene/module-build.xml (props changed)
lucene/dev/trunk/lucene/queries/ (props changed)
lucene/dev/trunk/lucene/queryparser/ (props changed)
lucene/dev/trunk/lucene/sandbox/ (props changed)
lucene/dev/trunk/lucene/spatial/ (props changed)
lucene/dev/trunk/lucene/suggest/ (props changed)
lucene/dev/trunk/lucene/test-framework/ (props changed)
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/mocksep/MockSingleIntIndexInput.java
lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
lucene/dev/trunk/lucene/tools/ (props changed)
lucene/dev/trunk/solr/ (props changed)
lucene/dev/trunk/solr/CHANGES.txt (props changed)
lucene/dev/trunk/solr/NOTICE.txt (props changed)
lucene/dev/trunk/solr/build.xml (props changed)
lucene/dev/trunk/solr/cloud-dev/ (props changed)
lucene/dev/trunk/solr/common-build.xml (props changed)
lucene/dev/trunk/solr/contrib/ (props changed)
lucene/dev/trunk/solr/core/ (props changed)
lucene/dev/trunk/solr/example/ (props changed)
lucene/dev/trunk/solr/lib/ (props changed)
lucene/dev/trunk/solr/licenses/ (props changed)
lucene/dev/trunk/solr/licenses/httpclient-LICENSE-ASL.txt (props changed)
lucene/dev/trunk/solr/licenses/httpclient-NOTICE.txt (props changed)
lucene/dev/trunk/solr/licenses/httpcore-LICENSE-ASL.txt (props changed)
lucene/dev/trunk/solr/licenses/httpcore-NOTICE.txt (props changed)
lucene/dev/trunk/solr/licenses/httpmime-LICENSE-ASL.txt (props changed)
lucene/dev/trunk/solr/licenses/httpmime-NOTICE.txt (props changed)
lucene/dev/trunk/solr/solrj/ (props changed)
lucene/dev/trunk/solr/test-framework/ (props changed)
lucene/dev/trunk/solr/testlogging.properties (props changed)
lucene/dev/trunk/solr/webapp/ (props changed)
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Aug 21 12:00:48 2012
@@ -15,6 +15,11 @@ New Features
that you must store term vector positions to store payloads.
(Robert Muir)
+* LUCENE-3892: Add a new BlockPostingsFormat that bulk-encodes docs,
+ freqs and positions in large (size 128) packed-int blocks for faster
+ search performance. This was from Han Jiang's 2012 Google Summer of
+ Code project (Han Jiang, Adrien Grand, Robert Muir, Mike McCandless)
+
API Changes
* LUCENE-4299: Added Terms.hasPositions() and Terms.hasOffsets().
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsWriter.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsWriter.java Tue Aug 21 12:00:48 2012
@@ -724,7 +724,7 @@ public class BlockTreeTermsWriter extend
// Write term stats, to separate byte[] blob:
bytesWriter2.writeVInt(term.stats.docFreq);
if (fieldInfo.getIndexOptions() != IndexOptions.DOCS_ONLY) {
- assert term.stats.totalTermFreq >= term.stats.docFreq;
+ assert term.stats.totalTermFreq >= term.stats.docFreq: term.stats.totalTermFreq + " vs " + term.stats.docFreq;
bytesWriter2.writeVLong(term.stats.totalTermFreq - term.stats.docFreq);
}
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java Tue Aug 21 12:00:48 2012
@@ -59,30 +59,36 @@ public abstract class MultiLevelSkipList
private int skipInterval[]; // skipInterval of each level
private int[] numSkipped; // number of docs skipped per level
- private int[] skipDoc; // doc id of current skip entry per level
+ protected int[] skipDoc; // doc id of current skip entry per level
private int lastDoc; // doc id of last read skip entry with docId <= target
private long[] childPointer; // child pointer of current skip entry per level
private long lastChildPointer; // childPointer of last read skip entry with docId <= target
private boolean inputIsBuffered;
-
- public MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) {
+ private final int skipMultiplier;
+
+ protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval, int skipMultiplier) {
this.skipStream = new IndexInput[maxSkipLevels];
this.skipPointer = new long[maxSkipLevels];
this.childPointer = new long[maxSkipLevels];
this.numSkipped = new int[maxSkipLevels];
this.maxNumberOfSkipLevels = maxSkipLevels;
this.skipInterval = new int[maxSkipLevels];
+ this.skipMultiplier = skipMultiplier;
this.skipStream [0]= skipStream;
this.inputIsBuffered = (skipStream instanceof BufferedIndexInput);
this.skipInterval[0] = skipInterval;
for (int i = 1; i < maxSkipLevels; i++) {
// cache skip intervals
- this.skipInterval[i] = this.skipInterval[i - 1] * skipInterval;
+ this.skipInterval[i] = this.skipInterval[i - 1] * skipMultiplier;
}
skipDoc = new int[maxSkipLevels];
}
+ // skipMultiplier and skipInterval are the same:
+ protected MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) {
+ this(skipStream, maxSkipLevels, skipInterval, skipInterval);
+ }
/** Returns the id of the doc to which the last call of {@link #skipTo(int)}
* has skipped. */
@@ -157,7 +163,7 @@ public abstract class MultiLevelSkipList
numSkipped[level] = numSkipped[level + 1] - skipInterval[level + 1];
skipDoc[level] = lastDoc;
if (level > 0) {
- childPointer[level] = skipStream[level].readVLong() + skipPointer[level - 1];
+ childPointer[level] = skipStream[level].readVLong() + skipPointer[level - 1];
}
}
@@ -187,7 +193,12 @@ public abstract class MultiLevelSkipList
/** Loads the skip levels */
private void loadSkipLevels() throws IOException {
- numberOfSkipLevels = MathUtil.log(docCount, skipInterval[0]);
+ if (docCount <= skipInterval[0]) {
+ numberOfSkipLevels = 1;
+ } else {
+ numberOfSkipLevels = 1+MathUtil.log(docCount/skipInterval[0], skipMultiplier);
+ }
+
if (numberOfSkipLevels > maxNumberOfSkipLevels) {
numberOfSkipLevels = maxNumberOfSkipLevels;
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListWriter.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListWriter.java Tue Aug 21 12:00:48 2012
@@ -26,6 +26,8 @@ import org.apache.lucene.util.MathUtil;
/**
* This abstract class writes skip lists with multiple levels.
*
+ * <pre>
+ *
* Example for skipInterval = 3:
* c (skip level 2)
* c c c (skip level 1)
@@ -45,6 +47,7 @@ import org.apache.lucene.util.MathUtil;
*
* While this class takes care of writing the different skip levels,
* subclasses must define the actual format of the skip data.
+ * </pre>
* @lucene.experimental
*/
@@ -54,15 +57,23 @@ public abstract class MultiLevelSkipList
// the skip interval in the list with level = 0
private int skipInterval;
+
+ // skipInterval used for level > 0
+ private int skipMultiplier;
// for every skip level a different buffer is used
private RAMOutputStream[] skipBuffer;
- protected MultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df) {
+ protected MultiLevelSkipListWriter(int skipInterval, int skipMultiplier, int maxSkipLevels, int df) {
this.skipInterval = skipInterval;
+ this.skipMultiplier = skipMultiplier;
// calculate the maximum number of skip levels for this document frequency
- numberOfSkipLevels = MathUtil.log(df, skipInterval);
+ if (df <= skipInterval) {
+ numberOfSkipLevels = 1;
+ } else {
+ numberOfSkipLevels = 1+MathUtil.log(df/skipInterval, skipMultiplier);
+ }
// make sure it does not exceed maxSkipLevels
if (numberOfSkipLevels > maxSkipLevels) {
@@ -70,6 +81,11 @@ public abstract class MultiLevelSkipList
}
}
+ // skipMultiplier and skipInterval are the same:
+ protected MultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df) {
+ this(skipInterval, skipInterval, maxSkipLevels, df);
+ }
+
protected void init() {
skipBuffer = new RAMOutputStream[numberOfSkipLevels];
for (int i = 0; i < numberOfSkipLevels; i++) {
@@ -95,7 +111,7 @@ public abstract class MultiLevelSkipList
* @param skipBuffer the skip buffer to write to
*/
protected abstract void writeSkipData(int level, IndexOutput skipBuffer) throws IOException;
-
+
/**
* Writes the current skip data to the buffers. The current document frequency determines
* the max level is skip data is to be written to.
@@ -104,11 +120,15 @@ public abstract class MultiLevelSkipList
* @throws IOException
*/
public void bufferSkip(int df) throws IOException {
- int numLevels;
+
+ assert df % skipInterval == 0;
+ int numLevels = 1;
+ df /= skipInterval;
// determine max level
- for (numLevels = 0; (df % skipInterval) == 0 && numLevels < numberOfSkipLevels; df /= skipInterval) {
+ while ((df % skipMultiplier) == 0 && numLevels < numberOfSkipLevels) {
numLevels++;
+ df /= skipMultiplier;
}
long childPointer = 0;
@@ -150,5 +170,4 @@ public abstract class MultiLevelSkipList
return skipPointer;
}
-
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/FixedIntBlockIndexInput.java Tue Aug 21 12:00:48 2012
@@ -77,76 +77,48 @@ public abstract class FixedIntBlockIndex
private static class Reader extends IntIndexInput.Reader {
private final IndexInput in;
+ private final BlockReader blockReader;
+ private final int blockSize;
+ private final int[] pending;
- protected final int[] pending;
- int upto;
-
+ private int upto;
private boolean seekPending;
private long pendingFP;
- private int pendingUpto;
- private long lastBlockFP;
- private final BlockReader blockReader;
- private final int blockSize;
- private final IntsRef bulkResult = new IntsRef();
+ private long lastBlockFP = -1;
public Reader(final IndexInput in, final int[] pending, final BlockReader blockReader) {
this.in = in;
this.pending = pending;
this.blockSize = pending.length;
- bulkResult.ints = pending;
this.blockReader = blockReader;
upto = blockSize;
}
void seek(final long fp, final int upto) {
- pendingFP = fp;
- pendingUpto = upto;
- seekPending = true;
- }
-
- private void maybeSeek() throws IOException {
- if (seekPending) {
- if (pendingFP != lastBlockFP) {
- // need new block
- in.seek(pendingFP);
- lastBlockFP = pendingFP;
- blockReader.readBlock();
- }
- upto = pendingUpto;
- seekPending = false;
+ assert upto < blockSize;
+ if (seekPending || fp != lastBlockFP) {
+ pendingFP = fp;
+ seekPending = true;
}
+ this.upto = upto;
}
@Override
public int next() throws IOException {
- this.maybeSeek();
- if (upto == blockSize) {
+ if (seekPending) {
+ // Seek & load new block
+ in.seek(pendingFP);
+ lastBlockFP = pendingFP;
+ blockReader.readBlock();
+ seekPending = false;
+ } else if (upto == blockSize) {
+ // Load new block
lastBlockFP = in.getFilePointer();
blockReader.readBlock();
upto = 0;
}
-
return pending[upto++];
}
-
- @Override
- public IntsRef read(final int count) throws IOException {
- this.maybeSeek();
- if (upto == blockSize) {
- blockReader.readBlock();
- upto = 0;
- }
- bulkResult.offset = upto;
- if (upto + count < blockSize) {
- bulkResult.length = count;
- upto += count;
- } else {
- bulkResult.length = blockSize - upto;
- upto = blockSize;
- }
-
- return bulkResult;
- }
}
private class Index extends IntIndexInput.Index {
@@ -178,7 +150,7 @@ public abstract class FixedIntBlockIndex
}
@Override
- public void set(final IntIndexInput.Index other) {
+ public void copyFrom(final IntIndexInput.Index other) {
final Index idx = (Index) other;
fp = idx.fp;
upto = idx.upto;
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/VariableIntBlockIndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/VariableIntBlockIndexInput.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/VariableIntBlockIndexInput.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/intblock/VariableIntBlockIndexInput.java Tue Aug 21 12:00:48 2012
@@ -90,12 +90,10 @@ public abstract class VariableIntBlockIn
private long lastBlockFP;
private int blockSize;
private final BlockReader blockReader;
- private final IntsRef bulkResult = new IntsRef();
public Reader(final IndexInput in, final int[] pending, final BlockReader blockReader) {
this.in = in;
this.pending = pending;
- bulkResult.ints = pending;
this.blockReader = blockReader;
}
@@ -146,26 +144,6 @@ public abstract class VariableIntBlockIn
return pending[upto++];
}
-
- @Override
- public IntsRef read(final int count) throws IOException {
- this.maybeSeek();
- if (upto == blockSize) {
- lastBlockFP = in.getFilePointer();
- blockSize = blockReader.readBlock();
- upto = 0;
- }
- bulkResult.offset = upto;
- if (upto + count < blockSize) {
- bulkResult.length = count;
- upto += count;
- } else {
- bulkResult.length = blockSize - upto;
- upto = blockSize;
- }
-
- return bulkResult;
- }
}
private class Index extends IntIndexInput.Index {
@@ -204,7 +182,7 @@ public abstract class VariableIntBlockIn
}
@Override
- public void set(final IntIndexInput.Index other) {
+ public void copyFrom(final IntIndexInput.Index other) {
final Index idx = (Index) other;
fp = idx.fp;
upto = idx.upto;
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsFormat.java Tue Aug 21 12:00:48 2012
@@ -159,7 +159,7 @@ import org.apache.lucene.util.fst.FST; /
* with the frequency of the term in that document (except when frequencies are
* omitted: {@link IndexOptions#DOCS_ONLY}).</p>
* <ul>
- * <li>FreqFile (.frq) --> Header, <TermFreqs, SkipData> <sup>TermCount</sup></li>
+ * <li>FreqFile (.frq) --> Header, <TermFreqs, SkipData?> <sup>TermCount</sup></li>
* <li>Header --> {@link CodecUtil#writeHeader CodecHeader}</li>
* <li>TermFreqs --> <TermFreq> <sup>DocFreq</sup></li>
* <li>TermFreq --> DocDelta[, Freq?]</li>
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsWriter.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsWriter.java Tue Aug 21 12:00:48 2012
@@ -185,8 +185,6 @@ public final class Lucene40PostingsWrite
int lastDocID;
int df;
- /** Adds a new doc in this term. If this returns null
- * then we just skip consuming positions/payloads. */
@Override
public void startDoc(int docID, int termDocFreq) throws IOException {
// if (DEBUG) System.out.println("SPW: startDoc seg=" + segment + " docID=" + docID + " tf=" + termDocFreq + " freqOut.fp=" + freqOut.getFilePointer());
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/IntIndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/IntIndexInput.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/IntIndexInput.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/IntIndexInput.java Tue Aug 21 12:00:48 2012
@@ -44,7 +44,7 @@ public abstract class IntIndexInput impl
/** Seeks primary stream to the last read offset */
public abstract void seek(IntIndexInput.Reader stream) throws IOException;
- public abstract void set(Index other);
+ public abstract void copyFrom(Index other);
@Override
public abstract Index clone();
@@ -55,23 +55,5 @@ public abstract class IntIndexInput impl
/** Reads next single int */
public abstract int next() throws IOException;
-
- /** Reads next chunk of ints */
- private IntsRef bulkResult;
-
- /** Read up to count ints. */
- public IntsRef read(int count) throws IOException {
- if (bulkResult == null) {
- bulkResult = new IntsRef();
- bulkResult.ints = new int[count];
- } else {
- bulkResult.grow(count);
- }
- for(int i=0;i<count;i++) {
- bulkResult.ints[i] = next();
- }
- bulkResult.length = count;
- return bulkResult;
- }
}
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java Tue Aug 21 12:00:48 2012
@@ -160,13 +160,13 @@ public class SepPostingsReader extends P
if (docIndex == null) {
docIndex = other.docIndex.clone();
} else {
- docIndex.set(other.docIndex);
+ docIndex.copyFrom(other.docIndex);
}
if (other.freqIndex != null) {
if (freqIndex == null) {
freqIndex = other.freqIndex.clone();
} else {
- freqIndex.set(other.freqIndex);
+ freqIndex.copyFrom(other.freqIndex);
}
} else {
freqIndex = null;
@@ -175,7 +175,7 @@ public class SepPostingsReader extends P
if (posIndex == null) {
posIndex = other.posIndex.clone();
} else {
- posIndex.set(other.posIndex);
+ posIndex.copyFrom(other.posIndex);
}
} else {
posIndex = null;
@@ -352,11 +352,11 @@ public class SepPostingsReader extends P
// TODO: can't we only do this if consumer
// skipped consuming the previous docs?
- docIndex.set(termState.docIndex);
+ docIndex.copyFrom(termState.docIndex);
docIndex.seek(docReader);
if (!omitTF) {
- freqIndex.set(termState.freqIndex);
+ freqIndex.copyFrom(termState.freqIndex);
freqIndex.seek(freqReader);
}
@@ -516,15 +516,15 @@ public class SepPostingsReader extends P
// TODO: can't we only do this if consumer
// skipped consuming the previous docs?
- docIndex.set(termState.docIndex);
+ docIndex.copyFrom(termState.docIndex);
docIndex.seek(docReader);
//System.out.println(" docIndex=" + docIndex);
- freqIndex.set(termState.freqIndex);
+ freqIndex.copyFrom(termState.freqIndex);
freqIndex.seek(freqReader);
//System.out.println(" freqIndex=" + freqIndex);
- posIndex.set(termState.posIndex);
+ posIndex.copyFrom(termState.posIndex);
//System.out.println(" posIndex=" + posIndex);
posSeekPending = true;
payloadPending = false;
@@ -629,7 +629,7 @@ public class SepPostingsReader extends P
// NOTE: don't seek pos here; do it lazily
// instead. Eg a PhraseQuery may skip to many
// docs before finally asking for positions...
- posIndex.set(skipper.getPosIndex());
+ posIndex.copyFrom(skipper.getPosIndex());
posSeekPending = true;
count = newCount;
doc = accum = skipper.getDoc();
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepSkipListReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepSkipListReader.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepSkipListReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/sep/SepSkipListReader.java Tue Aug 21 12:00:48 2012
@@ -108,12 +108,12 @@ class SepSkipListReader extends MultiLev
lastPayloadPointer = payloadBasePointer;
for(int i=0;i<maxNumberOfSkipLevels;i++) {
- docIndex[i].set(docBaseIndex);
+ docIndex[i].copyFrom(docBaseIndex);
if (freqIndex != null) {
- freqIndex[i].set(freqBaseIndex);
+ freqIndex[i].copyFrom(freqBaseIndex);
}
if (posBaseIndex != null) {
- posIndex[i].set(posBaseIndex);
+ posIndex[i].copyFrom(posBaseIndex);
}
}
Arrays.fill(payloadPointer, payloadBasePointer);
@@ -145,20 +145,20 @@ class SepSkipListReader extends MultiLev
lastPayloadPointer = payloadPointer[level];
lastPayloadLength = payloadLength[level];
if (freqIndex != null) {
- lastFreqIndex.set(freqIndex[level]);
+ lastFreqIndex.copyFrom(freqIndex[level]);
}
- lastDocIndex.set(docIndex[level]);
+ lastDocIndex.copyFrom(docIndex[level]);
if (lastPosIndex != null) {
- lastPosIndex.set(posIndex[level]);
+ lastPosIndex.copyFrom(posIndex[level]);
}
if (level > 0) {
if (freqIndex != null) {
- freqIndex[level-1].set(freqIndex[level]);
+ freqIndex[level-1].copyFrom(freqIndex[level]);
}
- docIndex[level-1].set(docIndex[level]);
+ docIndex[level-1].copyFrom(docIndex[level]);
if (posIndex != null) {
- posIndex[level-1].set(posIndex[level]);
+ posIndex[level-1].copyFrom(posIndex[level]);
}
}
}
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java?rev=1375486&r1=1375485&r2=1375486&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FieldInfos.java Tue Aug 21 12:00:48 2012
@@ -34,6 +34,8 @@ import org.apache.lucene.index.FieldInfo
public class FieldInfos implements Iterable<FieldInfo> {
private final boolean hasFreq;
private final boolean hasProx;
+ private final boolean hasPayloads;
+ private final boolean hasOffsets;
private final boolean hasVectors;
private final boolean hasNorms;
private final boolean hasDocValues;
@@ -45,6 +47,8 @@ public class FieldInfos implements Itera
public FieldInfos(FieldInfo[] infos) {
boolean hasVectors = false;
boolean hasProx = false;
+ boolean hasPayloads = false;
+ boolean hasOffsets = false;
boolean hasFreq = false;
boolean hasNorms = false;
boolean hasDocValues = false;
@@ -58,12 +62,16 @@ public class FieldInfos implements Itera
hasVectors |= info.hasVectors();
hasProx |= info.isIndexed() && info.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0;
hasFreq |= info.isIndexed() && info.getIndexOptions() != IndexOptions.DOCS_ONLY;
+ hasOffsets |= info.isIndexed() && info.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) >= 0;
hasNorms |= info.hasNorms();
hasDocValues |= info.hasDocValues();
+ hasPayloads |= info.hasPayloads();
}
this.hasVectors = hasVectors;
this.hasProx = hasProx;
+ this.hasPayloads = hasPayloads;
+ this.hasOffsets = hasOffsets;
this.hasFreq = hasFreq;
this.hasNorms = hasNorms;
this.hasDocValues = hasDocValues;
@@ -79,6 +87,16 @@ public class FieldInfos implements Itera
public boolean hasProx() {
return hasProx;
}
+
+ /** Returns true if any fields have payloads */
+ public boolean hasPayloads() {
+ return hasPayloads;
+ }
+
+ /** Returns true if any fields have offsets */
+ public boolean hasOffsets() {
+ return hasOffsets;
+ }
/**
* @return true if at least one field has any vectors