This content is retired. See latest version here.

Last updated: Sep 26 2013


Geographical distance facets group documents with a property of type GeoLocation by their distance from a given location. Geographical distance facets are requested, and extracted from search results by a method named GeoDistanceFacetFor. Just like range facets geographical distance facets need a number of ranges, represented by the NumericRange class, to group documents into.


Assuming we have indexed a number of restaurants as instance of this class:

using EPiServer.Find;

public class Restaurant
    public string Name { get; set; }

    public GeoLocation Location { get; set; }

We can then request the number of restaurants located with 1, 5 and 10 kilometers from a given location with the GeoDistanceFacetFor method like this:

var sergelsTors = new GeoLocation(59.33265, 18.06468)
var ranges = new List<NumericRange>
    new NumericRange {From = 0, To = 1},
    new NumericRange {From = 0, To = 5},
    new NumericRange {From = 0, To = 10}

result = client.Search<WithCoordinates>()
  .GeoDistanceFacetFor(x => x.Location, sergelsTorg, ranges.ToArray())

To extract the facet from the results variable we can again use a method named GeoDistanceFor. This will return an instance of the GeoDistanceFacet class which contains an instance of the GeoDistanceRangeResult per requested range.

facet = result.GeoDistanceFacetFor(x => x.Location);

foreach (var range in facet)
    "There are " + range.TotalCount 
  + " restaurants within " + range.To 
  + " of Sergels Torg");