Use haversine instead of distance in knn if distance is not required.

This commit is contained in:
Alex Roitman 2018-10-29 15:31:29 -07:00
parent 81c41a2d3d
commit 2383594048
1 changed files with 12 additions and 3 deletions

View File

@ -423,9 +423,18 @@ func (server *Server) nearestNeighbors(
if !match {
return true
}
dist := o.Distance(target)
if target.Meters() > 0 && dist > target.Meters() {
return false
var dist float64
if s.distance {
dist = o.Distance(target)
if target.Meters() > 0 && dist > target.Meters() {
return false
}
} else {
// don't need actual distances, use haversine as proxy for sorting
dist = target.HaversineTo(o.Center())
if target.Haversine() > 0 && dist > target.Haversine() {
return false
}
}
items = append(items, iterItem{id: id, o: o, fields: fields, dist: dist})
if !keepGoing {