@@ -74,46 +74,24 @@ func (b *faissBinaryIndex) reconstructBatch(vecIDs []int64, prealloc []float32)
7474 return nil , errNotSupported
7575}
7676
77- func (b * faissBinaryIndex ) searchWithoutIDs (qVector * vectorSet , k int64 , selector faiss.Selector , params json.RawMessage ) ([]float32 , []int64 , error ) {
77+ func (b * faissBinaryIndex ) searchWithSelector (qVector * vectorSet , k int64 , selector faiss.Selector , params json.RawMessage ) ([]float32 , []int64 , error ) {
7878 // search the binary index with oversampling and then do a re-ranking on the
7979 // FAISS index to get the top K results
8080 // first binarize the query vector if not already done
8181 qVector .binarize ()
82- _ , binIDs , err := b .binary .SearchWithoutIDs (qVector .binaryData , binaryOversampleValue * k ,
83- selector , params )
84- if err != nil {
85- return nil , nil , err
86- }
87- var scores []float32
88- var labels []int64
89- // if we have a backing index for re-ranking, compute the distances/scores for the
90- // retrieved binary IDs and then get the top K results based on those distances/scores.
91- if b .backing != nil {
92- distances , err := b .backing .DistCompute (qVector .floatData , binIDs )
93- if err != nil {
94- return nil , nil , err
95- }
96- // quick select algorithm for inplace partial sorting to get top K results
97- // based on distances/scores
98- scores , labels = topNIDsByDistance (distances , binIDs , int (k ))
82+
83+ var binIDs []int64
84+ var err error
85+ if selector == nil {
86+ _ , binIDs , err = b .binary .Search (qVector .binaryData , binaryOversampleValue * k )
9987 } else {
100- // if we don't have a backing index for re-ranking, we return error since we cannot return meaningful
101- // scores without a backing index to compute distances/scores for the retrieved binary IDs.
102- return nil , nil , errNotSupported
88+ _ , binIDs , err = b .binary .SearchWithSelector (qVector .binaryData , binaryOversampleValue * k ,
89+ selector , params )
10390 }
104- return scores , labels , nil
105- }
106-
107- func (b * faissBinaryIndex ) searchWithIDs (qVector * vectorSet , k int64 , selector faiss.Selector , params json.RawMessage ) ([]float32 , []int64 , error ) {
108- // search the binary index with oversampling and then do a re-ranking on the
109- // FAISS index to get the top K results
110- // first binarize the query vector if not already done
111- qVector .binarize ()
112- _ , binIDs , err := b .binary .SearchWithIDs (qVector .binaryData , binaryOversampleValue * k ,
113- selector , params )
11491 if err != nil {
11592 return nil , nil , err
11693 }
94+
11795 var scores []float32
11896 var labels []int64
11997 // if we have a backing index for re-ranking, compute the distances/scores for the
0 commit comments