diff --git a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs index 8d1c11747..da2f13e4b 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs @@ -7,6 +7,8 @@ using Orchard.Settings; using Orchard.Search.Models; using System.Linq; using System; +using System.Collections.Generic; +using Orchard.Collections; namespace Orchard.Search.Controllers { [ValidateInput(false)] @@ -24,16 +26,37 @@ namespace Orchard.Search.Controllers { public ActionResult Index(string q, int page = 1, int pageSize = 10) { var searchFields = CurrentSite.As().Record.SearchedFields.Split(new[] {',', ' '}, StringSplitOptions.RemoveEmptyEntries); + var searchHits = _searchService.Query(q, page, pageSize, + CurrentSite.As().Record.FilterCulture, + searchFields, + searchHit => searchHit); + + var searchResultViewModels = new List(); + + foreach(var searchHit in searchHits) { + var contentItem = _contentManager.Get(searchHit.ContentItemId); + // ignore search results which content item has been removed or unpublished + if(contentItem == null){ + searchHits.TotalItemCount--; + continue; + } + + searchResultViewModels.Add(new SearchResultViewModel { + Content = _contentManager.BuildDisplayModel(contentItem, "SummaryForSearch"), + SearchHit = searchHit + }); + } + + var pageOfItems = new PageOfItems(searchResultViewModels) { + PageNumber = page, + PageSize = searchHits.PageSize, + TotalItemCount = searchHits.TotalItemCount + }; + var searchViewModel = new SearchViewModel { Query = q, DefaultPageSize = 10, // <- yeah, I know :| - PageOfResults = _searchService.Query(q, page, pageSize, - CurrentSite.As().Record.FilterCulture, - searchFields, - searchHit => new SearchResultViewModel { - Content = _contentManager.BuildDisplayModel(_contentManager.Get(searchHit.ContentItemId), "SummaryForSearch"), - SearchHit = searchHit - }) + PageOfResults = pageOfItems }; //todo: deal with page requests beyond result count diff --git a/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs b/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs index 152abe66d..c73336d73 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs @@ -51,8 +51,9 @@ namespace Orchard.Search.Services { searchBuilder = searchBuilder .Slice((page > 0 ? page - 1 : 0) * (int)pageSize, (int)pageSize); + var searchResults = searchBuilder.Search(); - var pageOfItems = new PageOfItems(searchBuilder.Search().Select(shapeResult)) { + var pageOfItems = new PageOfItems(searchResults.Select(shapeResult)) { PageNumber = page, PageSize = pageSize != null ? (int)pageSize : totalCount, TotalItemCount = totalCount