public final class PulsingPostingsWriter extends PostingsWriterBase
Wraps another postings implementation and decides (based on total number of occurrences), whether a terms postings should be inlined into the term dictionary, or passed through to the wrapped writer.
| Constructor and Description |
|---|
PulsingPostingsWriter(SegmentWriteState state,
int maxPositions,
PostingsWriterBase wrappedPostingsWriter)
If the total number of positions (summed across all docs
for this term) is <= maxPositions, then the postings are
inlined into terms dict
|
| Modifier and Type | Method and Description |
|---|---|
void |
addPosition(int position,
BytesRef payload,
int startOffset,
int endOffset)
Add a new position & payload, and start/end offset.
|
void |
close() |
void |
encodeTerm(long[] empty,
DataOutput out,
FieldInfo fieldInfo,
BlockTermState _state,
boolean absolute)
Encode metadata as long[] and byte[].
|
void |
finishDoc()
Called when we are done adding positions & payloads
for each doc.
|
void |
finishTerm(BlockTermState _state)
Called when we are done adding docs to this term
|
void |
init(IndexOutput termsOut)
Called once after startup, before any terms have been
added.
|
BlockTermState |
newTermState()
Return a newly created empty TermState
|
int |
setField(FieldInfo fieldInfo)
Sets the current field for writing, and returns the
fixed length of long[] metadata (which is fixed per
field), called when the writing switches to another field.
|
void |
startDoc(int docID,
int termDocFreq)
Adds a new doc in this term.
|
void |
startTerm()
Start a new term.
|
mergepublic PulsingPostingsWriter(SegmentWriteState state, int maxPositions, PostingsWriterBase wrappedPostingsWriter)
public void init(IndexOutput termsOut) throws IOException
PostingsWriterBasetermsOut.init in class PostingsWriterBaseIOExceptionpublic BlockTermState newTermState() throws IOException
PostingsWriterBasenewTermState in class PostingsWriterBaseIOExceptionpublic void startTerm()
PostingsWriterBasePostingsWriterBase.finishTerm(BlockTermState) is done, only if the term has at least one
document.startTerm in class PostingsWriterBasepublic int setField(FieldInfo fieldInfo)
PostingsWriterBasesetField in class PostingsWriterBasepublic void startDoc(int docID,
int termDocFreq)
throws IOException
PostingsConsumerfreq will be -1 when term frequencies are omitted
for the field.startDoc in class PostingsConsumerIOExceptionpublic void addPosition(int position,
BytesRef payload,
int startOffset,
int endOffset)
throws IOException
PostingsConsumerBytesRef for the payload between calls
(method must fully consume the payload). startOffset
and endOffset will be -1 when offsets are not indexed.addPosition in class PostingsConsumerIOExceptionpublic void finishDoc()
throws IOException
PostingsConsumerfinishDoc in class PostingsConsumerIOExceptionpublic void finishTerm(BlockTermState _state) throws IOException
finishTerm in class PostingsWriterBaseIOExceptionpublic void encodeTerm(long[] empty,
DataOutput out,
FieldInfo fieldInfo,
BlockTermState _state,
boolean absolute)
throws IOException
PostingsWriterBaseabsolute controls whether
current term is delta encoded according to latest term.
Usually elements in longs are file pointers, so each one always
increases when a new term is consumed. out is used to write generic
bytes, which are not monotonic.
NOTE: sometimes long[] might contain "don't care" values that are unused, e.g.
the pointer to postings list may not be defined for some terms but is defined
for others, if it is designed to inline some postings data in term dictionary.
In this case, the postings writer should always use the last value, so that each
element in metadata long[] remains monotonic.encodeTerm in class PostingsWriterBaseIOExceptionpublic void close()
throws IOException
close in interface Closeableclose in interface AutoCloseableclose in class PostingsWriterBaseIOExceptionCopyright © 2000-2016 The Apache Software Foundation. All Rights Reserved.