public SegmentTermsEnum() throws IOException { in = BlockTermsReader.this.in.clone(); in.seek(termsStartPointer); indexEnum = indexReader.getFieldEnum(fieldInfo); doOrd = indexReader.supportsOrd(); fieldTerm.field = fieldInfo.name; state = postingsReader.newTermState(); state.totalTermFreq = -1; state.ord = -1; termSuffixes = new byte[128]; docFreqBytes = new byte[64]; // System.out.println("BTR.enum init this=" + this + " postingsReader=" + postingsReader); longs = new long[longsSize]; }
private void decodeMetaData() throws IOException { // System.out.println("BTR.decodeMetadata mdUpto=" + metaDataUpto + " vs termCount=" + // state.termBlockOrd + " state=" + state); if (!seekPending) { // TODO: cutover to random-access API // here.... really stupid that we have to decode N // wasted term metadata just to get to the N+1th // that we really need... // lazily catch up on metadata decode: final int limit = state.termBlockOrd; boolean absolute = metaDataUpto == 0; // TODO: better API would be "jump straight to term=N"??? while (metaDataUpto < limit) { // System.out.println(" decode mdUpto=" + metaDataUpto); // TODO: we could make "tiers" of metadata, ie, // decode docFreq/totalTF but don't decode postings // metadata; this way caller could get // docFreq/totalTF w/o paying decode cost for // postings // TODO: if docFreq were bulk decoded we could // just skipN here: // docFreq, totalTermFreq state.docFreq = freqReader.readVInt(); // System.out.println(" dF=" + state.docFreq); if (fieldInfo.getIndexOptions() != IndexOptions.DOCS) { state.totalTermFreq = state.docFreq + freqReader.readVLong(); // System.out.println(" totTF=" + state.totalTermFreq); } // metadata for (int i = 0; i < longs.length; i++) { longs[i] = bytesReader.readVLong(); } postingsReader.decodeTerm(longs, bytesReader, fieldInfo, state, absolute); metaDataUpto++; absolute = false; } } else { // System.out.println(" skip! seekPending"); } }