func newSegmentTermsEnum(r *FieldReader) *SegmentTermsEnum { ans := &SegmentTermsEnum{ FieldReader: r, stack: make([]*segmentTermsEnumFrame, 0), scratchReader: store.NewEmptyByteArrayDataInput(), term: make([]byte, 0), arcs: make([]*util.Arc, 1), fstOutputs: util.ByteSequenceOutputsSingleton(), } ans.TermsEnumImpl = newTermsEnumImpl(ans) log.Println("BTTR.init seg=%v", r.segment) // Used to hold seek by TermState, or cached seek ans.staticFrame = newFrame(ans, -1) if r.index != nil { ans.fstReader = r.index.BytesReader() } // Init w/ root block; don't use index since it may // not (and need not) have been loaded for i, _ := range ans.arcs { ans.arcs[i] = &util.Arc{} } ans.currentFrame = ans.staticFrame var arc *util.Arc if r.index != nil { arc = r.index.FirstArc(ans.arcs[0]) // Empty string prefix must have an output in the index! if !arc.IsFinal() { panic("assert fail") } } ans.currentFrame = ans.staticFrame ans.validIndexPrefix = 0 log.Printf("init frame state %v", ans.currentFrame.ord) ans.printSeekState() // ans.computeBlockStats() return ans }
func newFieldReader(owner *BlockTreeTermsReader, fieldInfo FieldInfo, numTerms int64, rootCode []byte, sumTotalTermFreq, sumDocFreq int64, docCount int32, indexStartFP int64, indexIn store.IndexInput) (r FieldReader, err error) { log.Print("Initializing FieldReader...") if numTerms <= 0 { panic("assert fail") } // assert numTerms > 0 r = FieldReader{ BlockTreeTermsReader: owner, fieldInfo: fieldInfo, numTerms: numTerms, sumTotalTermFreq: sumTotalTermFreq, sumDocFreq: sumDocFreq, docCount: docCount, indexStartFP: indexStartFP, rootCode: rootCode, } log.Printf("BTTR: seg=%v field=%v rootBlockCode=%v divisor=", owner.segment, fieldInfo.name, rootCode) in := store.NewByteArrayDataInput(rootCode) n, err := in.ReadVLong() if err != nil { return r, err } r.rootBlockFP = int64(uint64(n) >> BTT_OUTPUT_FLAGS_NUM_BITS) if indexIn != nil { clone := indexIn.Clone() log.Printf("start=%v field=%v", indexStartFP, fieldInfo.name) clone.Seek(indexStartFP) r.index, err = util.LoadFST(clone, util.ByteSequenceOutputsSingleton()) } return r, err }