Merge pull request #770 from steveyen/optimize-prealloced-postings-iterator
scorch zap segment merging reuses prealloc'ed PostingsIterator
This commit is contained in:
commit
29663c2795
|
@ -44,7 +44,6 @@ func (d *Dictionary) postingsList(term []byte, except *roaring.Bitmap, rv *Posti
|
||||||
*rv = PostingsList{} // clear the struct
|
*rv = PostingsList{} // clear the struct
|
||||||
}
|
}
|
||||||
rv.sb = d.sb
|
rv.sb = d.sb
|
||||||
rv.term = term
|
|
||||||
rv.except = except
|
rv.except = except
|
||||||
|
|
||||||
if d.fst != nil {
|
if d.fst != nil {
|
||||||
|
|
|
@ -164,6 +164,7 @@ func persistMergedRest(segments []*SegmentBase, drops []*roaring.Bitmap,
|
||||||
var bufLoc []uint64
|
var bufLoc []uint64
|
||||||
|
|
||||||
var postings *PostingsList
|
var postings *PostingsList
|
||||||
|
var postItr *PostingsIterator
|
||||||
|
|
||||||
rv := make([]uint64, len(fieldsInv))
|
rv := make([]uint64, len(fieldsInv))
|
||||||
fieldDvLocs := make([]uint64, len(fieldsInv))
|
fieldDvLocs := make([]uint64, len(fieldsInv))
|
||||||
|
@ -247,7 +248,7 @@ func persistMergedRest(segments []*SegmentBase, drops []*roaring.Bitmap,
|
||||||
return nil, 0, err2
|
return nil, 0, err2
|
||||||
}
|
}
|
||||||
|
|
||||||
postItr := postings.Iterator()
|
postItr = postings.iterator(postItr)
|
||||||
next, err2 := postItr.Next()
|
next, err2 := postItr.Next()
|
||||||
for next != nil && err2 == nil {
|
for next != nil && err2 == nil {
|
||||||
hitNewDocNum := newDocNums[dictI][next.Number()]
|
hitNewDocNum := newDocNums[dictI][next.Number()]
|
||||||
|
|
|
@ -28,21 +28,27 @@ import (
|
||||||
// PostingsList is an in-memory represenation of a postings list
|
// PostingsList is an in-memory represenation of a postings list
|
||||||
type PostingsList struct {
|
type PostingsList struct {
|
||||||
sb *SegmentBase
|
sb *SegmentBase
|
||||||
term []byte
|
|
||||||
postingsOffset uint64
|
postingsOffset uint64
|
||||||
freqOffset uint64
|
freqOffset uint64
|
||||||
locOffset uint64
|
locOffset uint64
|
||||||
locBitmap *roaring.Bitmap
|
locBitmap *roaring.Bitmap
|
||||||
postings *roaring.Bitmap
|
postings *roaring.Bitmap
|
||||||
except *roaring.Bitmap
|
except *roaring.Bitmap
|
||||||
postingKey []byte
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Iterator returns an iterator for this postings list
|
// Iterator returns an iterator for this postings list
|
||||||
func (p *PostingsList) Iterator() segment.PostingsIterator {
|
func (p *PostingsList) Iterator() segment.PostingsIterator {
|
||||||
rv := &PostingsIterator{
|
return p.iterator(nil)
|
||||||
postings: p,
|
}
|
||||||
|
|
||||||
|
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 {
|
if p.postings != nil {
|
||||||
// prepare the freq chunk details
|
// prepare the freq chunk details
|
||||||
var n uint64
|
var n uint64
|
||||||
|
|
Loading…
Reference in New Issue