Skip to content

Commit

Permalink
edge case
Browse files Browse the repository at this point in the history
  • Loading branch information
metonymic-smokey committed Nov 22, 2024
1 parent 60489d6 commit 02504bb
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 14 deletions.
30 changes: 30 additions & 0 deletions index/scorch/empty_vec.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//go:build vectors
// +build vectors

package scorch

import segment "github.com/blevesearch/scorch_segment_api/v2"

type emptyVecPostingsIterator struct{}

func (e *emptyVecPostingsIterator) Next() (segment.VecPosting, error) {
return nil, nil
}

func (e *emptyVecPostingsIterator) Advance(uint64) (segment.VecPosting, error) {
return nil, nil
}

func (e *emptyVecPostingsIterator) Size() int {
return 0
}

func (e *emptyVecPostingsIterator) BytesRead() uint64 {
return 0
}

func (e *emptyVecPostingsIterator) ResetBytesRead(uint64) {}

func (e *emptyVecPostingsIterator) BytesWritten() uint64 { return 0 }

var anemptyVecPostingsIterator = &emptyVecPostingsIterator{}
37 changes: 23 additions & 14 deletions index/scorch/optimize_knn.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,17 +114,22 @@ func (o *OptimizeVR) Finish() error {
eligibleVectorInternalIDs.And(snapshotGlobalDocNums[index])
}

eligibleLocalDocNums := make([]uint64,
eligibleVectorInternalIDs.GetCardinality())
// get the (segment-)local document numbers
for i, docNum := range eligibleVectorInternalIDs.ToArray() {
localDocNum := o.snapshot.localDocNumFromGlobal(index,
uint64(docNum))
eligibleLocalDocNums[i] = localDocNum
if eligibleVectorInternalIDs.GetCardinality() > 0 {
eligibleLocalDocNums := make([]uint64, 0,
eligibleVectorInternalIDs.GetCardinality())
// get the (segment-)local document numbers
for _, docNum := range eligibleVectorInternalIDs.ToArray() {
localDocNum := o.snapshot.localDocNumFromGlobal(index,
uint64(docNum))
eligibleLocalDocNums = append(eligibleLocalDocNums,
localDocNum)
}

if len(eligibleLocalDocNums) > 0 {
pl, err = vecIndex.SearchWithFilter(vr.vector, vr.k,
eligibleLocalDocNums, vr.searchParams)
}
}

pl, err = vecIndex.SearchWithFilter(vr.vector, vr.k,
eligibleLocalDocNums, vr.searchParams)
} else {
pl, err = vecIndex.Search(vr.vector, vr.k, vr.searchParams)
}
Expand All @@ -139,10 +144,14 @@ func (o *OptimizeVR) Finish() error {

atomic.AddUint64(&o.snapshot.parent.stats.TotKNNSearches, uint64(1))

// postings and iterators are already alloc'ed when
// IndexSnapshotVectorReader is created
vr.postings[index] = pl
vr.iterators[index] = pl.Iterator(vr.iterators[index])
if pl != nil && pl.Count() > 0 {
// postings and iterators are already alloc'ed when
// IndexSnapshotVectorReader is created
vr.postings[index] = pl
vr.iterators[index] = pl.Iterator(vr.iterators[index])
} else {
vr.iterators[index] = &emptyVecPostingsIterator{}
}
}
go vecIndex.Close()
}
Expand Down
4 changes: 4 additions & 0 deletions index/scorch/snapshot_vector_index.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,13 @@ func (is *IndexSnapshot) VectorReaderWithFilter(ctx context.Context, vector []fl

if rv.postings == nil {
rv.postings = make([]segment_api.VecPostingsList, len(is.segment))

}
if rv.iterators == nil {
rv.iterators = make([]segment_api.VecPostingsIterator, len(is.segment))
for index := 0; index < len(is.segment); index++ {
rv.iterators[index] = anemptyVecPostingsIterator
}
}

// initialize postings and iterators within the OptimizeVR's Finish()
Expand Down

0 comments on commit 02504bb

Please sign in to comment.