github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/vector/common/search_by_dist_params.go (about)

     1  //                           _       _
     2  // __      _____  __ ___   ___  __ _| |_ ___
     3  // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
     4  //  \ V  V /  __/ (_| |\ V /| | (_| | ||  __/
     5  //   \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
     6  //
     7  //  Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
     8  //
     9  //  CONTACT: hello@weaviate.io
    10  //
    11  
    12  package common
    13  
    14  const (
    15  	// DefaultSearchByDistInitialLimit :
    16  	// the initial limit of 100 here is an
    17  	// arbitrary decision, and can be tuned
    18  	// as needed
    19  	DefaultSearchByDistInitialLimit = 100
    20  
    21  	// DefaultSearchByDistLimitMultiplier :
    22  	// the decision to increase the limit in
    23  	// multiples of 10 here is an arbitrary
    24  	// decision, and can be tuned as needed
    25  	DefaultSearchByDistLimitMultiplier = 10
    26  )
    27  
    28  type SearchByDistParams struct {
    29  	offset             int
    30  	limit              int
    31  	totalLimit         int
    32  	maximumSearchLimit int64
    33  }
    34  
    35  func NewSearchByDistParams(
    36  	offset int,
    37  	limit int,
    38  	totalLimit int,
    39  	maximumSearchLimit int64,
    40  ) *SearchByDistParams {
    41  	return &SearchByDistParams{
    42  		offset:             offset,
    43  		limit:              limit,
    44  		totalLimit:         totalLimit,
    45  		maximumSearchLimit: maximumSearchLimit,
    46  	}
    47  }
    48  
    49  func (params *SearchByDistParams) TotalLimit() int {
    50  	return params.totalLimit
    51  }
    52  
    53  func (params *SearchByDistParams) MaximumSearchLimit() int64 {
    54  	return params.maximumSearchLimit
    55  }
    56  
    57  func (params *SearchByDistParams) OffsetCapacity(ids []uint64) int {
    58  	if l := len(ids); l < params.offset {
    59  		return l
    60  	}
    61  	return params.offset
    62  }
    63  
    64  func (params *SearchByDistParams) TotalLimitCapacity(ids []uint64) int {
    65  	if l := len(ids); l < params.totalLimit {
    66  		return l
    67  	}
    68  	return params.totalLimit
    69  }
    70  
    71  func (params *SearchByDistParams) Iterate() {
    72  	params.offset = params.totalLimit
    73  	params.limit *= DefaultSearchByDistLimitMultiplier
    74  	params.totalLimit = params.offset + params.limit
    75  }
    76  
    77  func (params *SearchByDistParams) MaxLimitReached() bool {
    78  	if params.maximumSearchLimit < 0 {
    79  		return false
    80  	}
    81  
    82  	return int64(params.totalLimit) > params.maximumSearchLimit
    83  }