github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/codec/blocktree/fieldReader.go (about)

     1  package blocktree
     2  
     3  import (
     4  	. "github.com/balzaczyy/golucene/core/index/model"
     5  	"github.com/balzaczyy/golucene/core/store"
     6  	"github.com/balzaczyy/golucene/core/util/fst"
     7  )
     8  
     9  type FieldReader struct {
    10  	numTerms         int64
    11  	fieldInfo        *FieldInfo
    12  	sumTotalTermFreq int64
    13  	sumDocFreq       int64
    14  	docCount         int
    15  	indexStartFP     int64
    16  	rootBlockFP      int64
    17  	rootCode         []byte
    18  	minTerm          []byte
    19  	maxTerm          []byte
    20  	longsSize        int
    21  	parent           *BlockTreeTermsReader
    22  
    23  	index *fst.FST
    24  }
    25  
    26  func newFieldReader(parent *BlockTreeTermsReader,
    27  	fieldInfo *FieldInfo, numTerms int64, rootCode []byte,
    28  	sumTotalTermFreq, sumDocFreq int64, docCount int,
    29  	indexStartFP int64, longsSize int, indexIn store.IndexInput,
    30  	minTerm, maxTerm []byte) (r FieldReader, err error) {
    31  
    32  	// log.Print("Initializing FieldReader...")
    33  	assert(numTerms > 0)
    34  	r = FieldReader{
    35  		parent:           parent,
    36  		fieldInfo:        fieldInfo,
    37  		numTerms:         numTerms,
    38  		sumTotalTermFreq: sumTotalTermFreq,
    39  		sumDocFreq:       sumDocFreq,
    40  		docCount:         docCount,
    41  		indexStartFP:     indexStartFP,
    42  		rootCode:         rootCode,
    43  		longsSize:        longsSize,
    44  		minTerm:          minTerm,
    45  		maxTerm:          maxTerm,
    46  	}
    47  	// log.Printf("BTTR: seg=%v field=%v rootBlockCode=%v divisor=",
    48  	// 	parent.segment, fieldInfo.Name, rootCode)
    49  
    50  	in := store.NewByteArrayDataInput(rootCode)
    51  	n, err := in.ReadVLong()
    52  	if err != nil {
    53  		return r, err
    54  	}
    55  	r.rootBlockFP = int64(uint64(n) >> BTT_OUTPUT_FLAGS_NUM_BITS)
    56  
    57  	if indexIn != nil {
    58  		clone := indexIn.Clone()
    59  		// log.Printf("start=%v field=%v", indexStartFP, fieldInfo.Name)
    60  		clone.Seek(indexStartFP)
    61  		r.index, err = fst.LoadFST(clone, fst.ByteSequenceOutputsSingleton())
    62  	}
    63  
    64  	return r, err
    65  }
    66  
    67  func (r *FieldReader) Iterator(reuse TermsEnum) TermsEnum {
    68  	return newSegmentTermsEnum(r)
    69  }
    70  
    71  func (r *FieldReader) SumTotalTermFreq() int64 {
    72  	return r.sumTotalTermFreq
    73  }
    74  
    75  func (r *FieldReader) SumDocFreq() int64 {
    76  	return r.sumDocFreq
    77  }
    78  
    79  func (r *FieldReader) DocCount() int {
    80  	return int(r.docCount)
    81  }