/// <summary> /// Take ISearchResults from examine, create title and body summary, and update SearchResultsCollection /// </summary> /// <param name="ResultsCollection"> /// The Results Collection. /// </param> /// <param name="SearchResults"> /// The search Results. /// </param> /// <param name="summariser"> /// The summarizer. /// </param> /// <param name="PageNumber"> /// The page Number. /// </param> /// <param name="pageLength"> /// The page Length. /// </param> /// <param name="Stopwatch"> /// The stopwatch. /// </param> private static SearchResultsCollection UpdateWithResults(SearchResultsCollection ResultsCollection, ISearchResults SearchResults, int PageNumber = 0, Stopwatch Stopwatch = null) { int pageLength = ResultsCollection.ConfigResultsPerPage; if (ResultsCollection.AllResults == null || !ResultsCollection.AllResults.Any()) { //Initial Search Population - Default behavior //Check for empty results var numResults = SearchResults.TotalItemCount; if (numResults < 1) { ResultsCollection.IsError = true; ResultsCollection.ErrorCode = "NoResults"; ResultsCollection.ErrorMsg = "Your search returned no results"; return(ResultsCollection); } else if (ResultsCollection.ErrorCode == "NoResults") { //Clear existing error, if present ResultsCollection.IsError = false; ResultsCollection.ErrorCode = ""; ResultsCollection.ErrorMsg = ""; } //Convert from Examine Results to FullText Results var convertedResults = ConvertSearchResultsToFullTextResults(SearchResults, ResultsCollection.Summarizer, PageNumber).ToList(); ResultsCollection.AllResults = convertedResults; } else { //Appending Results to existing collection var convertedResults = ResultsCollection.AllResults.ToList(); //Convert from Examine Results to FullText Results convertedResults.AddRange(ConvertSearchResultsToFullTextResults(SearchResults, ResultsCollection.Summarizer, PageNumber).ToList()); //Remove duplicates ResultsCollection.AllResults = convertedResults.DistinctBy(N => N.NodeId); } //End Stopwatch if (Stopwatch != null) { Stopwatch.Stop(); double millisecs = Stopwatch.ElapsedMilliseconds; var numSecs = Math.Round((millisecs / 1000), 3); ResultsCollection.TimeTakenSeconds = numSecs; } //Handle Paging var allResults = ResultsCollection.AllResults.ToList(); var totalResults = allResults.Count(); ResultsCollection.TotalResults = totalResults; var numPages = totalResults % pageLength == 0 ? totalResults / pageLength : totalResults / pageLength + 1; ResultsCollection.NumOfPages = numPages; var allPages = new List <SearchResultPage>(); //divide results into pages if (pageLength > 0) { var toSkip = 0; for (int i = 0; i < numPages; i++) { var page = new SearchResultPage(); page.PageNum = i + 1; toSkip = i * pageLength; page.Results = allResults.Skip(toSkip).Take(pageLength); page.ResultsOnPage = page.Results.Count(); page.FirstResult = toSkip + 1; var lastResult = toSkip + pageLength; if (lastResult > totalResults) { lastResult = totalResults; } page.LastResult = lastResult; allPages.Add(page); } } else { ResultsCollection.IsError = true; ResultsCollection.ErrorCode = "NoPage"; ResultsCollection.ErrorMsg = "Pagination incorrectly set up, no results on page" + PageNumber; return(ResultsCollection); } ResultsCollection.Pages = allPages; return(ResultsCollection); }