diff --git a/.github/workflows/cover.yml b/.github/workflows/cover.yml index e1a845d..2beeefa 100644 --- a/.github/workflows/cover.yml +++ b/.github/workflows/cover.yml @@ -9,9 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Install Go - uses: actions/setup-go@v1 + uses: actions/setup-go@v5 with: - go-version: '1.20.x' + go-version: '1.23.x' - name: Checkout code uses: actions/checkout@v2 - name: Test diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e0c425b..e2cdef8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: runs-on: ${{ matrix.platform }} steps: - name: Install Go - uses: actions/setup-go@v1 + uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} - name: Checkout code diff --git a/vector.go b/vector.go index 9de303c..4c16d10 100644 --- a/vector.go +++ b/vector.go @@ -37,9 +37,11 @@ type eligibleDocumentSelector struct { docNums []uint64 } -func (eds *eligibleDocumentSelector) SegmentEligibleDocs(segmentID int) []uint64 { +func (eds *eligibleDocumentSelector) SegmentEligibleDocuments(segmentID int) index.EligibleDocumentList { // segmentID not applicable for single doc index - return eds.docNums + return &eligibleDocumentList{ + docNums: eds.docNums, + } } func (eds *eligibleDocumentSelector) AddEligibleDocumentMatch(id index.IndexInternalID) error { @@ -50,6 +52,34 @@ func (eds *eligibleDocumentSelector) AddEligibleDocumentMatch(id index.IndexInte return nil } +type eligibleDocumentList struct { + docNums []uint64 +} + +func (edl *eligibleDocumentList) Count() uint64 { + return uint64(len(edl.docNums)) +} + +func (edl *eligibleDocumentList) Iterator() index.EligibleDocumentIterator { + return &eligibleDocumentIterator{ + docNums: edl.docNums, + } +} + +type eligibleDocumentIterator struct { + docNums []uint64 + idx int +} + +func (edi *eligibleDocumentIterator) Next() (uint64, bool) { + if edi.idx >= len(edi.docNums) { + return 0, false + } + rv := edi.docNums[edi.idx] + edi.idx++ + return rv, true +} + func (r *Reader) NewEligibleDocumentSelector() index.EligibleDocumentSelector { return &eligibleDocumentSelector{} } @@ -57,7 +87,7 @@ func (r *Reader) NewEligibleDocumentSelector() index.EligibleDocumentSelector { func (r *Reader) VectorReader(ctx context.Context, vector []float32, field string, k int64, searchParams json.RawMessage, selector index.EligibleDocumentSelector) (index.VectorReader, error) { - if selector != nil && len(selector.SegmentEligibleDocs(0)) == 0 { + if selector != nil && selector.SegmentEligibleDocuments(0).Count() == 0 { // if selector/filter is applicable but no eligible docs, // then current document does not qualify return NewVectorFieldReaderEmpty(), nil