Geospatial (distance) faceting using Lucene’s dynamic range facets by Mike McCandless.
From the post:
There have been several recent, quiet improvements to Lucene that, taken together, have made it surprisingly simple to add geospatial distance faceting to any Lucene search application, for example:
< 1 km (147) < 2 km (579) < 5 km (2775)Such distance facets, which allow the user to quickly filter their search results to those that are close to their location, has become especially important lately since most searches are now from mobile smartphones.
In the past, this has been challenging to implement because it’s so dynamic and so costly: the facet counts depend on each user’s location, and so cannot be cached and shared across users, and the underlying math for spatial distance is complex.
But several recent Lucene improvements now make this surprisingly simple!
As always, Mike is right on the edge so wait for Lucene 4.7 to try his code out or download the current source.
Distance might not be the only consideration. What if you wanted the shortest distance that did not intercept a a known patrol? Or known patrol within some window of variation.
Distance is still going to be a factor but the search required maybe more complex than just distance.