github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/sortby_scores.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 db 13 14 import ( 15 "sort" 16 17 "github.com/weaviate/weaviate/entities/storobj" 18 ) 19 20 // sortByScores aka RankedResults implements sort.Interface, allowing 21 // results aggregated from multiple shards to be 22 // sorted according to their BM25 ranking 23 type sortByScores struct { 24 objects []*storobj.Object 25 scores []float32 26 } 27 28 func (r *sortByScores) Swap(i, j int) { 29 r.objects[i], r.objects[j] = r.objects[j], r.objects[i] 30 r.scores[i], r.scores[j] = r.scores[j], r.scores[i] 31 } 32 33 func (r *sortByScores) Less(i, j int) bool { 34 return r.scores[i] > r.scores[j] 35 } 36 37 func (r *sortByScores) Len() int { 38 return len(r.scores) 39 } 40 41 type sortObjectsByScore struct{} 42 43 func newScoresSorter() *sortObjectsByScore { 44 return &sortObjectsByScore{} 45 } 46 47 func (s *sortObjectsByScore) sort(objects []*storobj.Object, scores []float32) ([]*storobj.Object, []float32) { 48 sbd := &sortByScores{objects, scores} 49 sort.Sort(sbd) 50 return sbd.objects, sbd.scores 51 }