private List<GeographicalSearchResult> GetSearchResults(SearchUserInput userSearch, int polygonAreaTypeId, ResultsToInclude resultsToInclude)
        {
            var isPostcode = userSearch.ContainsAnyNumbers;

            // Setup the fields to search through
            BooleanQuery finalQuery = isPostcode
                ? GetPostcodeQuery(userSearch.SearchText, FieldNames.Postcode)
                : GetPlaceNameQuery(userSearch, polygonAreaTypeId);

            // Perform the search
            var directory = FSDirectory.Open(new DirectoryInfo(
                Path.Combine(ApplicationConfiguration.SearchIndexDirectory, "placePostcodes")));
            var searcher = new IndexSearcher(directory, true);

            //Add the sorting parameters
            var sortBy = new Sort(
                new SortField(FieldNames.PlaceTypeWeighting, SortField.INT, true)
                );
            var docs = searcher.Search(finalQuery, null, ShortResultCount, sortBy);

            List<GeographicalSearchResult> searchResults = new List<GeographicalSearchResult>();
            int resultCount = docs.ScoreDocs.Length;
            for (int i = 0; i < resultCount; i++)
            {
                ScoreDoc scoreDoc = docs.ScoreDocs[i];

                Document doc = searcher.Doc(scoreDoc.Doc);

                var geographicalSearchResult = NewGeographicalSearchResult(doc, polygonAreaTypeId, isPostcode);

                CheckPolygonAreaCodeIsDefined(polygonAreaTypeId, geographicalSearchResult);

                AssignEastingAndNorthing(doc, geographicalSearchResult);

                AddResultIfRequired(resultsToInclude, geographicalSearchResult, searchResults);
            }
            return searchResults;
        }
 private static void AddResultIfRequired(ResultsToInclude resultsToInclude,
     GeographicalSearchResult geographicalSearchResult, List<GeographicalSearchResult> searchResults)
 {
     bool addResult = true;
     switch (resultsToInclude)
     {
         case ResultsToInclude.ParentAreasOnly:
             addResult = geographicalSearchResult.AreCoordinatesValid() == false;
             break;
         case ResultsToInclude.PlaceNamesAndPostcodesOnly:
             addResult = geographicalSearchResult.AreCoordinatesValid();
             break;
     }
     if (addResult)
     {
         searchResults.Add(geographicalSearchResult);
     }
 }