Class IndexedDISI
- java.lang.Object
-
- org.apache.lucene.search.DocIdSetIterator
-
- org.apache.lucene.codecs.lucene70.IndexedDISI
-
final class IndexedDISI extends DocIdSetIterator
Disk-based implementation of aDocIdSetIteratorwhich can return the index of the current document, i.e. the ordinal of the current document among the list of documents that this iterator can return. This is useful to implement sparse doc values by only having to encode values for documents that actually have a value.Implementation-wise, this
DocIdSetIteratoris inspired ofroaring bitmapsand encodes ranges of65536documents independently and picks between 3 encodings depending on the density of the range:ALLif the range contains 65536 documents exactly,DENSEif the range contains 4096 documents or more; in that case documents are stored in a bit set,SPARSEotherwise, and the lower 16 bits of the doc IDs are stored in ashort.
Only ranges that contain at least one value are encoded.
This implementation uses 6 bytes per document in the worst-case, which happens in the case that all ranges contain exactly one document.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classIndexedDISI.Method
-
Field Summary
Fields Modifier and Type Field Description private intblockprivate longblockEndprivate longcostprivate intdoc(package private) booleanexistsprivate intgapprivate intindex(package private) static intMAX_ARRAY_LENGTH(package private) IndexedDISI.Methodmethodprivate intnextBlockIndexprivate intnumberOfOnesprivate IndexInputsliceThe slice that stores theDocIdSetIterator.private longwordprivate intwordIndex-
Fields inherited from class org.apache.lucene.search.DocIdSetIterator
NO_MORE_DOCS
-
-
Constructor Summary
Constructors Constructor Description IndexedDISI(IndexInput slice, long cost)IndexedDISI(IndexInput in, long offset, long length, long cost)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intadvance(int target)Advances to the first beyond the current whose document number is greater than or equal to target, and returns the document number itself.private voidadvanceBlock(int targetBlock)booleanadvanceExact(int target)longcost()Returns the estimated cost of thisDocIdSetIterator.intdocID()Returns the following:-1ifDocIdSetIterator.nextDoc()orDocIdSetIterator.advance(int)were not called yet.private static voidflush(int block, FixedBitSet buffer, int cardinality, IndexOutput out)intindex()intnextDoc()Advances to the next document in the set and returns the doc it is currently on, orDocIdSetIterator.NO_MORE_DOCSif there are no more docs in the set.
NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior.private voidreadBlockHeader()(package private) static voidwriteBitSet(DocIdSetIterator it, IndexOutput out)-
Methods inherited from class org.apache.lucene.search.DocIdSetIterator
all, empty, range, slowAdvance
-
-
-
-
Field Detail
-
MAX_ARRAY_LENGTH
static final int MAX_ARRAY_LENGTH
- See Also:
- Constant Field Values
-
slice
private final IndexInput slice
The slice that stores theDocIdSetIterator.
-
cost
private final long cost
-
block
private int block
-
blockEnd
private long blockEnd
-
nextBlockIndex
private int nextBlockIndex
-
method
IndexedDISI.Method method
-
doc
private int doc
-
index
private int index
-
exists
boolean exists
-
word
private long word
-
wordIndex
private int wordIndex
-
numberOfOnes
private int numberOfOnes
-
gap
private int gap
-
-
Constructor Detail
-
IndexedDISI
IndexedDISI(IndexInput in, long offset, long length, long cost) throws java.io.IOException
- Throws:
java.io.IOException
-
IndexedDISI
IndexedDISI(IndexInput slice, long cost) throws java.io.IOException
- Throws:
java.io.IOException
-
-
Method Detail
-
flush
private static void flush(int block, FixedBitSet buffer, int cardinality, IndexOutput out) throws java.io.IOException- Throws:
java.io.IOException
-
writeBitSet
static void writeBitSet(DocIdSetIterator it, IndexOutput out) throws java.io.IOException
- Throws:
java.io.IOException
-
docID
public int docID()
Description copied from class:DocIdSetIteratorReturns the following:-1ifDocIdSetIterator.nextDoc()orDocIdSetIterator.advance(int)were not called yet.DocIdSetIterator.NO_MORE_DOCSif the iterator has exhausted.- Otherwise it should return the doc ID it is currently on.
- Specified by:
docIDin classDocIdSetIterator
-
advance
public int advance(int target) throws java.io.IOExceptionDescription copied from class:DocIdSetIteratorAdvances to the first beyond the current whose document number is greater than or equal to target, and returns the document number itself. Exhausts the iterator and returnsDocIdSetIterator.NO_MORE_DOCSif target is greater than the highest document number in the set.The behavior of this method is undefined when called with
target ≤ current, or after the iterator has exhausted. Both cases may result in unpredicted behavior.When
target > currentit behaves as if written:int advance(int target) { int doc; while ((doc = nextDoc()) < target) { } return doc; }Some implementations are considerably more efficient than that.NOTE: this method may be called with
DocIdSetIterator.NO_MORE_DOCSfor efficiency by some Scorers. If your implementation cannot efficiently determine that it should exhaust, it is recommended that you check for that value in each call to this method.- Specified by:
advancein classDocIdSetIterator- Throws:
java.io.IOException
-
advanceExact
public boolean advanceExact(int target) throws java.io.IOException- Throws:
java.io.IOException
-
advanceBlock
private void advanceBlock(int targetBlock) throws java.io.IOException- Throws:
java.io.IOException
-
readBlockHeader
private void readBlockHeader() throws java.io.IOException- Throws:
java.io.IOException
-
nextDoc
public int nextDoc() throws java.io.IOExceptionDescription copied from class:DocIdSetIteratorAdvances to the next document in the set and returns the doc it is currently on, orDocIdSetIterator.NO_MORE_DOCSif there are no more docs in the set.
NOTE: after the iterator has exhausted you should not call this method, as it may result in unpredicted behavior.- Specified by:
nextDocin classDocIdSetIterator- Throws:
java.io.IOException
-
index
public int index()
-
cost
public long cost()
Description copied from class:DocIdSetIteratorReturns the estimated cost of thisDocIdSetIterator.This is generally an upper bound of the number of documents this iterator might match, but may be a rough heuristic, hardcoded value, or otherwise completely inaccurate.
- Specified by:
costin classDocIdSetIterator
-
-