HomeDev GuideAPI Reference
Dev GuideAPI ReferenceLegal TermsDev CommunityOptimizely AcademySubmit a ticketLog In
Dev Guide

Geographical distance facets

Describes how to use facets based on geographical distance.

Facets group documents based on criteria, such as specific terms or date ranges. 

Geographic distance facets group documents with a GeoLocation type property by distance from a location. Geographical distance facets are requested and extracted from search results with the GeoDistanceFacetFor method.

Geographic distance facets need several ranges to group documents. Use the NumericRange class to do this.

Assume you indexed several restaurants as an instance of this class:

using EPiServer.Find;

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

Request the number of restaurants within 1, 5, and 10 kilometers of a location with the GeoDistanceFacetFor method, as shown below.

var sergelsTorg = 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())
  .GetResult();

To extract the facet from the results variable, use the GeoDistanceFor method (same name as the method used to retrieve facets). The GeoDistanceFor method returns 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) {
  Console.WriteLine("There are " + range.TotalCount +
    " restaurants within " +
    range.To +
    " of Sergels Torg");
}