6565public class FSTTermsReader extends FieldsProducer {
6666 private final TreeMap <String , TermsReader > fields = new TreeMap <>();
6767 private final PostingsReaderBase postingsReader ;
68+ private final IndexInput fstMetaInput ;
6869 private final IndexInput fstTermsInput ;
6970
7071 public FSTTermsReader (SegmentReadState state , PostingsReaderBase postingsReader )
7172 throws IOException {
72- final String termsFileName =
73+ final String termsMetaFileName =
7374 IndexFileNames .segmentFileName (
74- state .segmentInfo .name , state .segmentSuffix , FSTTermsWriter .TERMS_EXTENSION );
75+ state .segmentInfo .name , state .segmentSuffix , FSTTermsWriter .TERMS_META_EXTENSION );
76+ final String termsDataFileName =
77+ IndexFileNames .segmentFileName (
78+ state .segmentInfo .name , state .segmentSuffix , FSTTermsWriter .TERMS_DATA_EXTENSION );
7579
7680 this .postingsReader = postingsReader ;
77- this .fstTermsInput = state .directory .openInput (termsFileName , IOContext .LOAD );
81+ this .fstMetaInput = state .directory .openInput (termsMetaFileName , IOContext .LOAD );
82+ this .fstTermsInput = state .directory .openInput (termsDataFileName , IOContext .LOAD );
7883
79- IndexInput in = this .fstTermsInput ;
84+ IndexInput in = this .fstMetaInput ;
8085
8186 boolean success = false ;
8287 try {
83- CodecUtil .checkIndexHeader (
84- in ,
85- FSTTermsWriter .TERMS_CODEC_NAME ,
86- FSTTermsWriter .TERMS_VERSION_START ,
87- FSTTermsWriter .TERMS_VERSION_CURRENT ,
88- state .segmentInfo .getId (),
89- state .segmentSuffix );
90- CodecUtil .checksumEntireFile (in );
88+ verifyInput (state , in );
89+ verifyInput (state , fstTermsInput );
9190 this .postingsReader .init (in , state );
9291 seekDir (in );
9392
@@ -102,19 +101,32 @@ public FSTTermsReader(SegmentReadState state, PostingsReaderBase postingsReader)
102101 long sumDocFreq =
103102 fieldInfo .getIndexOptions () == IndexOptions .DOCS ? sumTotalTermFreq : in .readVLong ();
104103 int docCount = in .readVInt ();
104+ long startFP = in .readVLong ();
105+ fstTermsInput .seek (startFP );
105106 TermsReader current =
106- new TermsReader (fieldInfo , in , numTerms , sumTotalTermFreq , sumDocFreq , docCount );
107+ new TermsReader (fieldInfo , in , fstTermsInput , numTerms , sumTotalTermFreq , sumDocFreq , docCount );
107108 TermsReader previous = fields .put (fieldInfo .name , current );
108109 checkFieldSummary (state .segmentInfo , in , current , previous );
109110 }
110111 success = true ;
111112 } finally {
112113 if (success == false ) {
113- IOUtils .closeWhileHandlingException (in );
114+ IOUtils .closeWhileHandlingException (in , fstTermsInput );
114115 }
115116 }
116117 }
117118
119+ private static void verifyInput (SegmentReadState state , IndexInput in ) throws IOException {
120+ CodecUtil .checkIndexHeader (
121+ in ,
122+ FSTTermsWriter .TERMS_CODEC_NAME ,
123+ FSTTermsWriter .TERMS_VERSION_START ,
124+ FSTTermsWriter .TERMS_VERSION_CURRENT ,
125+ state .segmentInfo .getId (),
126+ state .segmentSuffix );
127+ CodecUtil .checksumEntireFile (in );
128+ }
129+
118130 private void seekDir (IndexInput in ) throws IOException {
119131 in .seek (in .length () - CodecUtil .footerLength () - 8 );
120132 in .seek (in .readLong ());
@@ -165,7 +177,7 @@ public int size() {
165177 @ Override
166178 public void close () throws IOException {
167179 try {
168- IOUtils .close (postingsReader , fstTermsInput );
180+ IOUtils .close (postingsReader , fstMetaInput , fstTermsInput );
169181 } finally {
170182 fields .clear ();
171183 }
@@ -182,7 +194,8 @@ final class TermsReader extends Terms {
182194
183195 TermsReader (
184196 FieldInfo fieldInfo ,
185- IndexInput in ,
197+ IndexInput metaIn ,
198+ IndexInput dataIn ,
186199 long numTerms ,
187200 long sumTotalTermFreq ,
188201 long sumDocFreq ,
@@ -195,8 +208,8 @@ final class TermsReader extends Terms {
195208 this .docCount = docCount ;
196209 OffHeapFSTStore offHeapFSTStore = new OffHeapFSTStore ();
197210 FSTTermOutputs outputs = new FSTTermOutputs (fieldInfo );
198- this .dict = new FST <>(FST .readMetadata (in , outputs ), in , offHeapFSTStore );
199- in .skipBytes (offHeapFSTStore .size ());
211+ this .dict = new FST <>(FST .readMetadata (metaIn , outputs ), dataIn , offHeapFSTStore );
212+ dataIn .skipBytes (offHeapFSTStore .size ());
200213 }
201214
202215 @ Override
@@ -508,7 +521,11 @@ void decodeMetaData() throws IOException {
508521 if (meta .bytes != null ) {
509522 bytesReader .reset (meta .bytes , 0 , meta .bytes .length );
510523 }
511- postingsReader .decodeTerm (bytesReader , fieldInfo , state , true );
524+ try {
525+ postingsReader .decodeTerm (bytesReader , fieldInfo , state , true );
526+ } catch (Exception ex ) {
527+ System .out .println ("bingo" );
528+ }
512529 decoded = true ;
513530 }
514531 }
0 commit comments