Package org.apache.lucene.codecs
Class MultiLevelSkipListWriter
- java.lang.Object
-
- org.apache.lucene.codecs.MultiLevelSkipListWriter
-
- Direct Known Subclasses:
Lucene84SkipWriter
public abstract class MultiLevelSkipListWriter extends java.lang.ObjectThis abstract class writes skip lists with multiple levels.Example for skipInterval = 3: c (skip level 2) c c c (skip level 1) x x x x x x x x x x (skip level 0) d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) 3 6 9 12 15 18 21 24 27 30 (df) d - document x - skip data c - skip data with child pointer Skip level i contains every skipInterval-th entry from skip level i-1. Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). Each skip entry on a leveli>0contains a pointer to the corresponding skip entry in list i-1. This guarantees a logarithmic amount of skips to find the target document. While this class takes care of writing the different skip levels, subclasses must define the actual format of the skip data.
-
-
Field Summary
Fields Modifier and Type Field Description protected intnumberOfSkipLevelsnumber of levels in this skip listprivate RAMOutputStream[]skipBufferfor every skip level a different buffer is usedprivate intskipIntervalthe skip interval in the list with level = 0private intskipMultiplierskipInterval used for level > 0
-
Constructor Summary
Constructors Modifier Constructor Description protectedMultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df)Creates aMultiLevelSkipListWriter, whereskipIntervalandskipMultiplierare the same.protectedMultiLevelSkipListWriter(int skipInterval, int skipMultiplier, int maxSkipLevels, int df)Creates aMultiLevelSkipListWriter.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidbufferSkip(int df)Writes the current skip data to the buffers.protected voidinit()Allocates internal skip buffers.protected voidresetSkip()Creates new buffers or empties the existing oneslongwriteSkip(IndexOutput output)Writes the buffered skip lists to the given output.protected abstract voidwriteSkipData(int level, IndexOutput skipBuffer)Subclasses must implement the actual skip data encoding in this method.
-
-
-
Field Detail
-
numberOfSkipLevels
protected final int numberOfSkipLevels
number of levels in this skip list
-
skipInterval
private final int skipInterval
the skip interval in the list with level = 0
-
skipMultiplier
private final int skipMultiplier
skipInterval used for level > 0
-
skipBuffer
private RAMOutputStream[] skipBuffer
for every skip level a different buffer is used
-
-
Constructor Detail
-
MultiLevelSkipListWriter
protected MultiLevelSkipListWriter(int skipInterval, int skipMultiplier, int maxSkipLevels, int df)Creates aMultiLevelSkipListWriter.
-
MultiLevelSkipListWriter
protected MultiLevelSkipListWriter(int skipInterval, int maxSkipLevels, int df)Creates aMultiLevelSkipListWriter, whereskipIntervalandskipMultiplierare the same.
-
-
Method Detail
-
init
protected void init()
Allocates internal skip buffers.
-
resetSkip
protected void resetSkip()
Creates new buffers or empties the existing ones
-
writeSkipData
protected abstract void writeSkipData(int level, IndexOutput skipBuffer) throws java.io.IOExceptionSubclasses must implement the actual skip data encoding in this method.- Parameters:
level- the level skip data shall be writing forskipBuffer- the skip buffer to write to- Throws:
java.io.IOException
-
bufferSkip
public void bufferSkip(int df) throws java.io.IOExceptionWrites the current skip data to the buffers. The current document frequency determines the max level is skip data is to be written to.- Parameters:
df- the current document frequency- Throws:
java.io.IOException- If an I/O error occurs
-
writeSkip
public long writeSkip(IndexOutput output) throws java.io.IOException
Writes the buffered skip lists to the given output.- Parameters:
output- the IndexOutput the skip lists shall be written to- Returns:
- the pointer the skip list starts
- Throws:
java.io.IOException
-
-