github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/sortby_distances.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 type sortByDistances struct { 21 objects []*storobj.Object 22 scores []float32 23 } 24 25 func (sbd *sortByDistances) Len() int { 26 return len(sbd.objects) 27 } 28 29 func (sbd *sortByDistances) Less(i, j int) bool { 30 return sbd.scores[i] < sbd.scores[j] 31 } 32 33 func (sbd *sortByDistances) Swap(i, j int) { 34 sbd.scores[i], sbd.scores[j] = sbd.scores[j], sbd.scores[i] 35 sbd.objects[i], sbd.objects[j] = sbd.objects[j], sbd.objects[i] 36 } 37 38 type sortObjectsByDistance struct{} 39 40 func newDistancesSorter() *sortObjectsByDistance { 41 return &sortObjectsByDistance{} 42 } 43 44 func (s *sortObjectsByDistance) sort(objects []*storobj.Object, distances []float32) ([]*storobj.Object, []float32) { 45 sbd := &sortByDistances{objects, distances} 46 sort.Sort(sbd) 47 return sbd.objects, sbd.scores 48 }