1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| private PendingBlock writeBlock( int prefixLength, boolean isFloor, int floorLeadLabel, int start, int end, boolean hasTerms, boolean hasSubBlocks) throws IOException { if (isLeafBlock) { subIndices = null; StatsWriter statsWriter = new StatsWriter(this.statsWriter, fieldInfo.getIndexOptions() != IndexOptions.DOCS); for (int i = start; i < end; i++) { PendingEntry ent = pending.get(i); assert ent.isTerm : "i=" + i;
PendingTerm term = (PendingTerm) ent;
assert StringHelper.startsWith(term.termBytes, prefix) : term + " prefix=" + prefix; BlockTermState state = term.state; final int suffix = term.termBytes.length - prefixLength;
suffixLengthsWriter.writeVInt(suffix); suffixWriter.append(term.termBytes, prefixLength, suffix); assert floorLeadLabel == -1 || (term.termBytes[prefixLength] & 0xff) >= floorLeadLabel;
statsWriter.add(state.docFreq, state.totalTermFreq);
postingsWriter.encodeTerm(metaWriter, fieldInfo, state, absolute); absolute = false; }
} else { subIndices = new ArrayList<>(); StatsWriter statsWriter = new StatsWriter(this.statsWriter, fieldInfo.getIndexOptions() != IndexOptions.DOCS); for (int i = start; i < end; i++) { PendingEntry ent = pending.get(i); if (ent.isTerm) { PendingTerm term = (PendingTerm) ent;
assert StringHelper.startsWith(term.termBytes, prefix) : term + " prefix=" + prefix; BlockTermState state = term.state; final int suffix = term.termBytes.length - prefixLength;
suffixLengthsWriter.writeVInt(suffix << 1); suffixWriter.append(term.termBytes, prefixLength, suffix);
statsWriter.add(state.docFreq, state.totalTermFreq);
postingsWriter.encodeTerm(metaWriter, fieldInfo, state, absolute); absolute = false; } else { PendingBlock block = (PendingBlock) ent; assert StringHelper.startsWith(block.prefix, prefix); final int suffix = block.prefix.length - prefixLength; assert StringHelper.startsWith(block.prefix, prefix);
assert suffix > 0;
suffixLengthsWriter.writeVInt((suffix << 1) | 1); suffixWriter.append(block.prefix.bytes, prefixLength, suffix);
assert floorLeadLabel == -1 || (block.prefix.bytes[prefixLength] & 0xff) >= floorLeadLabel : "floorLeadLabel=" + floorLeadLabel + " suffixLead=" + (block.prefix.bytes[prefixLength] & 0xff); assert block.fp < startFP;
suffixLengthsWriter.writeVLong(startFP - block.fp); subIndices.add(block.index); } } statsWriter.finish();
assert subIndices.size() != 0; } termsOut.writeVInt((int) metaWriter.size()); metaWriter.copyTo(termsOut); metaWriter.reset(); }
|