@Override public BlockTermState newTermState() throws IOException { final SepTermState state = new SepTermState(); state.docIndex = docIn.index(); if (freqIn != null) { state.freqIndex = freqIn.index(); } if (posIn != null) { state.posIndex = posIn.index(); } return state; }
@Override public void readTermsBlock(IndexInput termsIn, FieldInfo fieldInfo, BlockTermState _termState) throws IOException { final SepTermState termState = (SepTermState) _termState; // System.out.println("SEPR: readTermsBlock termsIn.fp=" + termsIn.getFilePointer()); final int len = termsIn.readVInt(); // System.out.println(" numBytes=" + len); if (termState.bytes == null) { termState.bytes = new byte[ArrayUtil.oversize(len, 1)]; termState.bytesReader = new ByteArrayDataInput(termState.bytes); } else if (termState.bytes.length < len) { termState.bytes = new byte[ArrayUtil.oversize(len, 1)]; } termState.bytesReader.reset(termState.bytes, 0, len); termsIn.readBytes(termState.bytes, 0, len); }
@Override public void nextTerm(FieldInfo fieldInfo, BlockTermState _termState) throws IOException { final SepTermState termState = (SepTermState) _termState; final boolean isFirstTerm = termState.termBlockOrd == 0; // System.out.println("SEPR.nextTerm termCount=" + termState.termBlockOrd + " isFirstTerm=" + // isFirstTerm + " bytesReader.pos=" + termState.bytesReader.getPosition()); // System.out.println(" docFreq=" + termState.docFreq); termState.docIndex.read(termState.bytesReader, isFirstTerm); // System.out.println(" docIndex=" + termState.docIndex); if (fieldInfo.getIndexOptions() != IndexOptions.DOCS_ONLY) { termState.freqIndex.read(termState.bytesReader, isFirstTerm); if (fieldInfo.getIndexOptions() == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) { // System.out.println(" freqIndex=" + termState.freqIndex); termState.posIndex.read(termState.bytesReader, isFirstTerm); // System.out.println(" posIndex=" + termState.posIndex); if (fieldInfo.hasPayloads()) { if (isFirstTerm) { termState.payloadFP = termState.bytesReader.readVLong(); } else { termState.payloadFP += termState.bytesReader.readVLong(); } // System.out.println(" payloadFP=" + termState.payloadFP); } } } if (termState.docFreq >= skipMinimum) { // System.out.println(" readSkip @ " + termState.bytesReader.getPosition()); if (isFirstTerm) { termState.skipFP = termState.bytesReader.readVLong(); } else { termState.skipFP += termState.bytesReader.readVLong(); } // System.out.println(" skipFP=" + termState.skipFP); } else if (isFirstTerm) { termState.skipFP = 0; } }
@Override public SepTermState clone() { SepTermState other = new SepTermState(); other.copyFrom(this); return other; }