diff --git a/index/scorch/segment/zap/dict.go b/index/scorch/segment/zap/dict.go index 137c35d7..55796ffa 100644 --- a/index/scorch/segment/zap/dict.go +++ b/index/scorch/segment/zap/dict.go @@ -44,7 +44,6 @@ func (d *Dictionary) postingsList(term []byte, except *roaring.Bitmap, rv *Posti *rv = PostingsList{} // clear the struct } rv.sb = d.sb - rv.term = term rv.except = except if d.fst != nil { diff --git a/index/scorch/segment/zap/merge.go b/index/scorch/segment/zap/merge.go index b1eed28b..751fcb58 100644 --- a/index/scorch/segment/zap/merge.go +++ b/index/scorch/segment/zap/merge.go @@ -164,6 +164,7 @@ func persistMergedRest(segments []*SegmentBase, drops []*roaring.Bitmap, var bufLoc []uint64 var postings *PostingsList + var postItr *PostingsIterator rv := make([]uint64, len(fieldsInv)) fieldDvLocs := make([]uint64, len(fieldsInv)) @@ -247,7 +248,7 @@ func persistMergedRest(segments []*SegmentBase, drops []*roaring.Bitmap, return nil, 0, err2 } - postItr := postings.Iterator() + postItr = postings.iterator(postItr) next, err2 := postItr.Next() for next != nil && err2 == nil { hitNewDocNum := newDocNums[dictI][next.Number()] diff --git a/index/scorch/segment/zap/posting.go b/index/scorch/segment/zap/posting.go index 67e08d1a..d504885d 100644 --- a/index/scorch/segment/zap/posting.go +++ b/index/scorch/segment/zap/posting.go @@ -28,21 +28,27 @@ import ( // PostingsList is an in-memory represenation of a postings list type PostingsList struct { sb *SegmentBase - term []byte postingsOffset uint64 freqOffset uint64 locOffset uint64 locBitmap *roaring.Bitmap postings *roaring.Bitmap except *roaring.Bitmap - postingKey []byte } // Iterator returns an iterator for this postings list func (p *PostingsList) Iterator() segment.PostingsIterator { - rv := &PostingsIterator{ - postings: p, + return p.iterator(nil) +} + +func (p *PostingsList) iterator(rv *PostingsIterator) *PostingsIterator { + if rv == nil { + rv = &PostingsIterator{} + } else { + *rv = PostingsIterator{} // clear the struct } + rv.postings = p + if p.postings != nil { // prepare the freq chunk details var n uint64