public ActionResult Index(PagerParameters pagerParameters, string q = "") { Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var searchFields = Services.WorkContext.CurrentSite.As<SearchSettingsPart>().SearchedFields; IPageOfItems<ISearchHit> searchHits = new PageOfItems<ISearchHit>(new ISearchHit[] { }); try { searchHits = _searchService.Query(q, pager.Page, pager.PageSize, Services.WorkContext.CurrentSite.As<SearchSettingsPart>().Record.FilterCulture, searchFields, searchHit => searchHit); } catch(Exception exception) { Logger.Error(T("Invalid search query: {0}", exception.Message).Text); Services.Notifier.Error(T("Invalid search query: {0}", exception.Message)); } var list = Shape.List(); foreach (var contentItem in searchHits.Select(searchHit => _contentManager.Get(searchHit.ContentItemId))) { // ignore search results which content item has been removed or unpublished if(contentItem == null){ searchHits.TotalItemCount--; continue; } list.Add(_contentManager.BuildDisplay(contentItem, "Summary")); } var pagerShape = Shape.Pager(pager).TotalItemCount(searchHits.TotalItemCount); var searchViewModel = new SearchViewModel { Query = q, TotalItemCount = searchHits.TotalItemCount, StartPosition = (pager.Page - 1) * pager.PageSize + 1, EndPosition = pager.Page * pager.PageSize > searchHits.TotalItemCount ? searchHits.TotalItemCount : pager.Page * pager.PageSize, ContentItems = list, Pager = pagerShape }; //todo: deal with page requests beyond result count return View(searchViewModel); }
public ActionResult Index(PagerParameters pagerParameters, string searchIndex = null, string q = "") { var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var searchSettingPart = Services.WorkContext.CurrentSite.As<SearchSettingsPart>(); var index = !String.IsNullOrWhiteSpace(searchIndex) ? searchIndex.Trim() : searchSettingPart.SearchIndex; if (String.IsNullOrEmpty(index)) { Services.Notifier.Error(T("Please define a default search index.")); return HttpNotFound(); } IPageOfItems<ISearchHit> searchHits = new PageOfItems<ISearchHit>(new ISearchHit[] { }); try { searchHits = _searchService.Query( q, pager.Page, pager.PageSize, Services.WorkContext.CurrentSite.As<SearchSettingsPart>().FilterCulture, index, searchSettingPart.GetSearchFields(index), searchHit => searchHit); } catch(Exception exception) { Logger.Error(T("Invalid search query: {0}", exception.Message).Text); Services.Notifier.Error(T("Invalid search query: {0}", exception.Message)); } var list = Shape.List(); var foundIds = searchHits.Select(searchHit => searchHit.ContentItemId).ToList(); // ignore search results which content item has been removed or unpublished var foundItems = _contentManager.GetMany<IContent>(foundIds, VersionOptions.Published, new QueryHints()).ToList(); foreach (var contentItem in foundItems) { list.Add(_contentManager.BuildDisplay(contentItem, "Summary")); } searchHits.TotalItemCount -= foundIds.Count() - foundItems.Count(); var pagerShape = Shape.Pager(pager).TotalItemCount(searchHits.TotalItemCount); var searchViewModel = new SearchViewModel { Query = q, TotalItemCount = searchHits.TotalItemCount, StartPosition = (pager.Page - 1) * pager.PageSize + 1, EndPosition = pager.Page * pager.PageSize > searchHits.TotalItemCount ? searchHits.TotalItemCount : pager.Page * pager.PageSize, ContentItems = list, Pager = pagerShape }; //todo: deal with page requests beyond result count return View(searchViewModel); }
public ActionResult Search(PagerParameters pagerParameters, string q = "") { var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var searchFields = _orchardServices.WorkContext.CurrentSite.As<SearchSettingsPart>().SearchedFields; IPageOfItems<ISearchHit> searchHits = new PageOfItems<ISearchHit>(new ISearchHit[] { }); try { searchHits = _wikiPageService.IndexSearch(q, pager.Page, pager.PageSize, _orchardServices.WorkContext.CurrentSite.As<SearchSettingsPart>().Record.FilterCulture, searchFields, searchHit => searchHit); } catch (Exception exception) { Logger.Error(T("Invalid search query: {0}", exception.Message).Text); _orchardServices.Notifier.Error(T("Invalid search query: {0}", exception.Message)); } var list = Shape.List(); var foundIds = searchHits.Select(searchHit => searchHit.ContentItemId).ToList(); // ignore search results which content item has been removed or unpublished var foundItems = _orchardServices.ContentManager.GetMany<IContent>(foundIds, VersionOptions.Published, new QueryHints()).ToList(); foreach (var contentItem in foundItems) { list.Add(_orchardServices.ContentManager.BuildDisplay(contentItem, "Summary")); } searchHits.TotalItemCount -= foundIds.Count() - foundItems.Count(); var pagerShape = Shape.Pager(pager).TotalItemCount(searchHits.TotalItemCount); var searchViewModel = new SearchViewModel { Query = q, TotalItemCount = searchHits.TotalItemCount, StartPosition = (pager.Page - 1) * pager.PageSize + 1, EndPosition = pager.Page * pager.PageSize > searchHits.TotalItemCount ? searchHits.TotalItemCount : pager.Page * pager.PageSize, ContentItems = list, Pager = pagerShape }; //todo: deal with page requests beyond result count return View(searchViewModel); }