Having just recently started using Thinking Sphinx, I’ve been toying with the geograhical search that it provides to simply do distance-based searches while querying other information. The Geo-searching part of the manual shows how to do searches limiting distance:
# Searching for places within 10km Place.search "pancakes", :geo => [@lat, @lng], :with => {"@geodist" => 0..10_000} # Searching for places sorted by closest first Place.search "pancakes", :geo => [@lat, @lng], :order => "@geodist ASC, @relevance DESC"
Unfortunately, the first style of query where @geodist is limited in range – when used as-is – does not work I found in my testing that I could order by @geodist as per the second query but when I added the :with range, I had no results.
The solution was actually simple, but really annoying. You have to use Floats instead of Integers for the range numbers! So changing the first query to:
Place.search "pancakes", :geo => [@lat, @lng], :with => {"@geodist" => 0.0..10_000.0} # or more neatly Place.search "pancakes", :geo => [@lat, @lng], :with => {"@geodist" => Range.new(0.0, 10_000.0)}
makes it all work. Now to get someone to update those docs!
Update: Updated!