/// <summary> /// Takes the examine search results and return the content for each page /// </summary> /// <param name="allResults">The examine search results</param> /// <param name="pageNumber">The page number of results to return</param> /// <param name="pageSize">The number of items per page</param> /// <returns>A collection of content pages for the page of results</returns> public IEnumerable <IPublishedContent> ConvertSearchResultsToPublishedContent(ISearchResults allResults, int pageNumber, int pageSize) { var pagedSet = allResults.Skip((pageNumber - 1) * pageSize).Take(pageSize).Select(x => x.Id).ToList(); return(_uHelper.TypedContent(pagedSet) .Union(_uHelper.TypedMedia(pagedSet))); }
public ActionResult Index(ContentModel model, string query = "", string searchIn = "Subject", int page = 1) { ISearchResults results = null; var textFields = new List <string>(); switch (searchIn) { case "Subject": textFields.Add("postTitle"); break; case "Message": textFields.Add("postBody"); break; case "Username": textFields.Add("postCreator"); break; } int pageIndex = page - 1; int pageSize = 5; if (ExamineManager.Instance.TryGetIndex("ExternalIndex", out var index)) { var searcher = index.GetSearcher(); var value = "" + query + "*"; results = searcher.CreateQuery("content") .NodeTypeAlias("forumpost").And() //.Field("postType","1").And() .Field(textFields[0], value.MultipleCharacterWildcard()) //.GroupedOr(textFields, query) .Execute(maxResults: pageSize * (pageIndex + 1)); //.And().Field(textFields, new ExamineValue(Examineness.ComplexWildcard, "*" + query +"*")); } var pagedResults = results.Skip(pageIndex * pageSize).Take(pageSize); var totalResults = results.TotalItemCount; var pagedResultsAsContent = Umbraco.Content(pagedResults.Select(x => x.Id)); SearchViewModel searchPageViewModel = new SearchViewModel(model.Content) { //do the search query = query, searchIn = searchIn, TotalResults = totalResults, PagedResult = pagedResultsAsContent }; //then return the custom model: return(CurrentTemplate(searchPageViewModel)); }
/// <summary> /// Performs a search using the specified <paramref name="sortOptions"/>. /// </summary> /// <param name="operation">The boolean operation the search should be based on.</param> /// <param name="sortOptions">The sort options specyfing how the results should be sorted.</param> /// <param name="results">The results of the search.</param> /// <param name="total">The total amount of results returned by the search.</param> protected virtual void Execute(IBooleanOperation operation, ISortOptions sortOptions, out IEnumerable <ISearchResult> results, out long total) { // Cast the boolean operation to IQueryExecutor IQueryExecutor executor = operation; // If "SortField" doesn't specified, we don't apply any sorting if (!string.IsNullOrWhiteSpace(sortOptions.SortField)) { switch (sortOptions.SortOrder) { case SortOrder.Ascending: executor = operation.OrderBy(new SortableField(sortOptions.SortField, sortOptions.SortType)); break; case SortOrder.Descending: executor = operation.OrderByDescending(new SortableField(sortOptions.SortField, sortOptions.SortType)); break; default: throw new Exception($"Unsupported sort order: {sortOptions.SortOrder}"); } } if (sortOptions is IOffsetOptions offset) { ISearchResults allResults = executor.Execute(); // Update the total amount of results total = allResults.TotalItemCount; // Apply limit and offset results = allResults .Skip(offset.Offset) .Take(offset.Limit); } else { // Since no offset or limit is specified, we request all results ISearchResults allResults = executor.Execute(int.MaxValue); // Update the total amount of results total = allResults.TotalItemCount; // Update "results" with the value of "allResults" as we're not filtering the results results = allResults; } }
/// <summary> /// Takes the examine search results and return the content for each page /// </summary> /// <param name="allResults">The examine search results</param> /// <param name="pageNumber">The page number of results to return</param> /// <param name="pageSize">The number of items per page</param> /// <returns>A collection of content pages for the page of results</returns> private IEnumerable <IPublishedContent> GetResultsForThisPage(ISearchResults allResults, int pageNumber, int pageSize) { return(allResults.Skip((pageNumber - 1) * pageSize).Take(pageSize).Select(x => _uHelper.TypedContent(x.Id))); }
public static LatestUpdateList ObtainAllMessages(int pageNo = 1) { //Instantiate variables var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); LatestUpdateList lstLatestUpdates = new LatestUpdateList(); //try //{ //Get all ... BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.MessagesSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(IndexTypes.Content); IBooleanOperation query = criteria.Field(Common.NodeProperties.indexType, Common.NodeProperties.content); //gets all items query.And().OrderByDescending(Common.NodeProperties.publishDate); query.And().OrderBy(Common.NodeProperties.nodeName); query.And().OrderBy(Common.miscellaneous.Path); ISearchResults isResults = mySearcher.Search(query.Compile()); if (isResults.Any()) { //Instantiate variables DateTime msgDate = new DateTime(1900, 1, 1); DateTime prevDate = new DateTime(1900, 1, 1); latestUpdates latestUpdate = new latestUpdates(); visionary visionary = new visionary(); message message; IPublishedContent ipMsg; IPublishedContent ipVisionary; //Get item counts and total experiences. lstLatestUpdates.Pagination.itemsPerPage = 20; lstLatestUpdates.Pagination.totalItems = isResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (lstLatestUpdates.Pagination.totalItems > lstLatestUpdates.Pagination.itemsPerPage) { lstLatestUpdates.Pagination.totalPages = (int)Math.Ceiling((double)lstLatestUpdates.Pagination.totalItems / (double)lstLatestUpdates.Pagination.itemsPerPage); } else { lstLatestUpdates.Pagination.itemsPerPage = lstLatestUpdates.Pagination.totalItems; lstLatestUpdates.Pagination.totalPages = 1; } //Determine current page number if (pageNo <= 0 || pageNo > lstLatestUpdates.Pagination.totalPages) { pageNo = 1; } lstLatestUpdates.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (lstLatestUpdates.Pagination.totalItems > lstLatestUpdates.Pagination.itemsPerPage) { lstLatestUpdates.Pagination.itemsToSkip = lstLatestUpdates.Pagination.itemsPerPage * (pageNo - 1); } //Get top 'n' results and determine link structure //foreach (SearchResult srResult in isResults.Take(30)) foreach (SearchResult srResult in isResults.Skip(lstLatestUpdates.Pagination.itemsToSkip).Take(lstLatestUpdates.Pagination.itemsPerPage)) { //Obtain message's node ipMsg = umbracoHelper.TypedContent(Convert.ToInt32(srResult.Id)); if (ipMsg != null) { //Obtain date of message msgDate = ipMsg.GetPropertyValue <DateTime>(Common.NodeProperties.publishDate); //Create a new date for messages if (msgDate != prevDate) { //Update current date prevDate = msgDate; //Create new instances for updates and add to list of all updates. latestUpdate = new latestUpdates(); latestUpdate.datePublished = msgDate; lstLatestUpdates.LstLatestUpdates.Add(latestUpdate); //Reset the visionary class on every new date change. visionary = new visionary(); } //Obtain current visionary or webmaster if (ipMsg.AncestorsOrSelf().FirstOrDefault(x => x.DocumentTypeAlias == Common.docType.Visionary) != null) { if (visionary.id != ipMsg.AncestorsOrSelf().FirstOrDefault(x => x.DocumentTypeAlias == Common.docType.Visionary).Id) { //Obtain visionary node ipVisionary = ipMsg.AncestorsOrSelf().FirstOrDefault(x => x.DocumentTypeAlias == Common.docType.Visionary); //Create new visionary class and add to latest update class visionary = new visionary(); visionary.id = ipVisionary.Id; visionary.name = ipVisionary.Name; visionary.url = ipVisionary.Url; latestUpdate.lstVisionaries.Add(visionary); } } else if (ipMsg.AncestorsOrSelf().FirstOrDefault(x => x.DocumentTypeAlias == Common.docType.WebmasterMessageList) != null) { if (visionary.id != ipMsg.AncestorsOrSelf().FirstOrDefault(x => x.DocumentTypeAlias == Common.docType.WebmasterMessageList).Id) { //Obtain visionary node ipVisionary = ipMsg.AncestorsOrSelf().FirstOrDefault(x => x.DocumentTypeAlias == Common.docType.WebmasterMessageList); //Create new visionary class and add to latest update class visionary = new visionary(); visionary.id = ipVisionary.Id; visionary.name = ipVisionary.Name; visionary.url = ipVisionary.Url; latestUpdate.lstVisionaries.Add(visionary); } } //Create new message and add to existing visionary class. message = new message(); message.id = ipMsg.Id; message.title = ipMsg.Name; message.url = ipMsg.Url; visionary.lstMessages.Add(message); } } } //} //catch (Exception ex) //{ // //StringBuilder sb = new StringBuilder(); // //sb.AppendLine(@"MessageController.cs : RenderLatestMessages()"); // //sb.AppendLine("model:" + Newtonsoft.Json.JsonConvert.SerializeObject(lstLatestUpdates)); // //Common.SaveErrorMessage(ex, sb, typeof(MessageController)); // //ModelState.AddModelError("", "*An error occured while creating the latest message list."); // //return CurrentUmbracoPage(); //} //Return data to partialview return(lstLatestUpdates); }
public ActionResult RenderAllMessages() { //Instantiate variables MsgList msgList = new MsgList(); var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); try { //Get all prayers BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.MessagesSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(IndexTypes.Content); IBooleanOperation query = criteria.Field(Common.NodeProperties.indexType, Common.NodeProperties.content); //gets all items query.And().OrderByDescending(Common.NodeProperties.publishDate); query.And().OrderBy(Common.NodeProperties.nodeName); ISearchResults isResults = mySearcher.Search(query.Compile()); //Get item counts and total experiences. msgList.Pagination.itemsPerPage = 20; msgList.Pagination.totalItems = isResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (msgList.Pagination.totalItems > msgList.Pagination.itemsPerPage) { msgList.Pagination.totalPages = (int)Math.Ceiling((double)msgList.Pagination.totalItems / (double)msgList.Pagination.itemsPerPage); } else { msgList.Pagination.itemsPerPage = msgList.Pagination.totalItems; msgList.Pagination.totalPages = 1; } //Determine current page number var pageNo = 1; if (!string.IsNullOrEmpty(Request.QueryString[Common.miscellaneous.PageNo])) { int.TryParse(Request.QueryString[Common.miscellaneous.PageNo], out pageNo); if (pageNo <= 0 || pageNo > msgList.Pagination.totalPages) { pageNo = 1; } } msgList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (msgList.Pagination.totalItems > msgList.Pagination.itemsPerPage) { msgList.Pagination.itemsToSkip = msgList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in isResults.Skip(msgList.Pagination.itemsToSkip).Take(msgList.Pagination.itemsPerPage)) { var msgLink = new Models.MsgLink(); msgLink.Id = sRecord.Id; msgLink.Title = sRecord.Fields[Common.NodeProperties.nodeName]; msgLink.Subtitle = sRecord.Fields[Common.NodeProperties.subtitle]; msgLink.Url = Umbraco.NiceUrl(sRecord.Id); //msgLink.Date = Convert.ToDateTime(sRecord.Fields[Common.NodeProperties.publishDate]); msgLink.Dates = (Convert.ToDateTime(sRecord.Fields[Common.NodeProperties.publishDate])).ToString("MMMM dd"); msgList.lstMsgLinks.Add(msgLink); } } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine(@"MessageController.cs : RenderAllMessages()"); sb.AppendLine("model:" + Newtonsoft.Json.JsonConvert.SerializeObject(msgList)); Common.SaveErrorMessage(ex, sb, typeof(MessageController)); ModelState.AddModelError("", "*An error occured while retrieving all messages."); return(CurrentUmbracoPage()); } //Return data to partialview return(PartialView("~/Views/Partials/MessagesFromHeaven/_msgList.cshtml", msgList)); }
public ActionResult RenderList() { //Instantiate variables var prayerList = new Models.PrayerList(); try { // var memberShipHelper = new Umbraco.Web.Security.MembershipHelper(UmbracoContext.Current); var CmPrayerList = new ContentModels.PrayerList(Umbraco.TypedContent((int)Common.siteNode.ThePrayerCorner)); //Get all prayers BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.PrayersSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(IndexTypes.Content); IBooleanOperation query = criteria.Field(Common.NodeProperties.indexType, Common.NodeProperties.content); //gets all items query.And().OrderByDescending(Common.NodeProperties.requestDate); query.And().OrderBy(Common.NodeProperties.prayerTitle); ISearchResults isResults = mySearcher.Search(query.Compile()); //Get item counts and total experiences. prayerList.Pagination.itemsPerPage = 10; prayerList.Pagination.totalItems = isResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (prayerList.Pagination.totalItems > prayerList.Pagination.itemsPerPage) { prayerList.Pagination.totalPages = (int)Math.Ceiling((double)prayerList.Pagination.totalItems / (double)prayerList.Pagination.itemsPerPage); } else { prayerList.Pagination.itemsPerPage = prayerList.Pagination.totalItems; prayerList.Pagination.totalPages = 1; } //Determine current page number var pageNo = 1; if (!string.IsNullOrEmpty(Request.QueryString[Common.miscellaneous.PageNo])) { int.TryParse(Request.QueryString[Common.miscellaneous.PageNo], out pageNo); if (pageNo <= 0 || pageNo > prayerList.Pagination.totalPages) { pageNo = 1; } } prayerList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (prayerList.Pagination.totalItems > prayerList.Pagination.itemsPerPage) { prayerList.Pagination.itemsToSkip = prayerList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in isResults.Skip(prayerList.Pagination.itemsToSkip).Take(prayerList.Pagination.itemsPerPage)) { //Create new prayerLink class var prayerLink = new Models.PrayerLink(); prayerLink.Id = sRecord.Id; prayerLink.Title = sRecord.Fields[Common.NodeProperties.prayerTitle]; prayerLink.Url = Umbraco.NiceUrl(sRecord.Id); prayerLink.Date = Convert.ToDateTime(sRecord.Fields[Common.NodeProperties.requestDate]); //Determine current percentage prayerLink.currentPercentage = int.Parse(sRecord.Fields[Common.NodeProperties.currentPercentage]); prayerLink.baseCalculationDate = DateTime.Parse(sRecord.Fields[Common.NodeProperties.baseCalculationDate]); int daysSinceBaseDate = (DateTime.Now - prayerLink.baseCalculationDate).Days; if (daysSinceBaseDate > prayerLink.currentPercentage) { prayerLink.currentPercentage = 0; } else { prayerLink.currentPercentage = prayerLink.currentPercentage - daysSinceBaseDate; } //Determine proper candle based upon current percentage prayerLink.CandleUrl = CmPrayerList.CandleOut.Url; if (prayerLink.currentPercentage == 0) { prayerLink.CandleUrl = CmPrayerList.CandleOut.Url; } else if (prayerLink.currentPercentage >= 1 && prayerLink.currentPercentage <= 10) { prayerLink.CandleUrl = CmPrayerList.Candle10.Url; } else if (prayerLink.currentPercentage >= 11 && prayerLink.currentPercentage <= 20) { prayerLink.CandleUrl = CmPrayerList.Candle20.Url; } else if (prayerLink.currentPercentage >= 21 && prayerLink.currentPercentage <= 30) { prayerLink.CandleUrl = CmPrayerList.Candle30.Url; } else if (prayerLink.currentPercentage >= 31 && prayerLink.currentPercentage <= 40) { prayerLink.CandleUrl = CmPrayerList.Candle40.Url; } else if (prayerLink.currentPercentage >= 41 && prayerLink.currentPercentage <= 50) { prayerLink.CandleUrl = CmPrayerList.Candle50.Url; } else if (prayerLink.currentPercentage >= 51 && prayerLink.currentPercentage <= 60) { prayerLink.CandleUrl = CmPrayerList.Candle60.Url; } else if (prayerLink.currentPercentage >= 61 && prayerLink.currentPercentage <= 70) { prayerLink.CandleUrl = CmPrayerList.Candle70.Url; } else if (prayerLink.currentPercentage >= 71 && prayerLink.currentPercentage <= 80) { prayerLink.CandleUrl = CmPrayerList.Candle80.Url; } else if (prayerLink.currentPercentage >= 81 && prayerLink.currentPercentage <= 90) { prayerLink.CandleUrl = CmPrayerList.Candle90.Url; } else if (prayerLink.currentPercentage >= 91 && prayerLink.currentPercentage <= 100) { prayerLink.CandleUrl = CmPrayerList.Candle100.Url; } // IEnumerable <string> prayerSummary = sRecord.Fields[Common.NodeProperties.prayer].Split().Take(32); prayerLink.PrayerSummary = string.Join(" ", prayerSummary) + "..."; //Obtain member ContentModels.Member CmMember; int memberId; if (int.TryParse(sRecord.Fields[Common.NodeProperties.prayerRequestMember], out memberId)) { IPublishedContent ipMember = memberShipHelper.GetById(memberId); CmMember = new ContentModels.Member(ipMember); } else { CmMember = new ContentModels.Member(Udi.Parse(sRecord.Fields[Common.NodeProperties.prayerRequestMember]).ToPublishedContent()); } StringBuilder sbAuthor = new StringBuilder(); sbAuthor.Append(CmMember.FirstName); sbAuthor.Append(" "); sbAuthor.Append(CmMember.LastName); sbAuthor.Append("."); prayerLink.MemberName = sbAuthor.ToString(); // prayerList.lstPrayerLinks.Add(prayerLink); } } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine(@"PrayerController.cs : RenderList()"); sb.AppendLine("model:" + Newtonsoft.Json.JsonConvert.SerializeObject(prayerList)); Common.SaveErrorMessage(ex, sb, typeof(PrayerController)); ModelState.AddModelError("", "*An error occured while creating the prayer list."); return(CurrentUmbracoPage()); } //Return data to partialview return(PartialView("~/Views/Partials/PrayerCorner/_prayerList.cshtml", prayerList)); }
//Search by private void ObtainByIlluminationStories(Models.SearchList searchList, int pageNo) { //Instantiate variables var memberShipHelper = new Umbraco.Web.Security.MembershipHelper(UmbracoContext.Current); searchList.ShowIlluminationStories = true; searchList.SearchInTitle = "Illumination Stories"; if (!string.IsNullOrWhiteSpace(searchList.SearchFor)) { //Set up search criteria BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.IlluminationStoriesSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(BooleanOperation.Or); //Setup up search fields by importance IBooleanOperation query = criteria.Field(Common.NodeProperties.title, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.story, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.experienceType, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.member, searchList.SearchFor.MultipleCharacterWildcard()); //IBooleanOperation query = criteria.Field(Common.NodeProperties.title, searchList.SearchFor.Boost(2)); //query.Or().Field(Common.NodeProperties.story, searchList.SearchFor.Boost(1)); //query.Or().Field(Common.NodeProperties.experienceType, searchList.SearchFor); //query.Or().Field(Common.NodeProperties.member, searchList.SearchFor); //Obtain result with query ISearchResults searchResults = mySearcher.Search(query.Compile()); //Get item counts and total experiences. searchList.Pagination.totalItems = searchResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.totalPages = (int)Math.Ceiling((double)searchList.Pagination.totalItems / (double)searchList.Pagination.itemsPerPage); } else { searchList.Pagination.itemsPerPage = searchList.Pagination.totalItems; searchList.Pagination.totalPages = 1; } //Determine current page number if (pageNo <= 0 || pageNo > searchList.Pagination.totalPages) { pageNo = 1; } searchList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.itemsToSkip = searchList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in searchResults.Skip(searchList.Pagination.itemsToSkip).Take(searchList.Pagination.itemsPerPage)) { var storyLink = new Models.illuminationStoryLink(); storyLink.experienceType = sRecord.Fields[Common.NodeProperties.experienceType]; storyLink.id = sRecord.Id; storyLink.title = sRecord.Fields[Common.NodeProperties.title]; storyLink.url = Umbraco.NiceUrl(sRecord.Id); //Obtain member ContentModels.Member CmMember; int memberId; if (int.TryParse(sRecord.Fields[Common.NodeProperties.member], out memberId)) { IPublishedContent ipMember = memberShipHelper.GetById(memberId); CmMember = new ContentModels.Member(ipMember); } else { CmMember = new ContentModels.Member(Udi.Parse(sRecord.Fields[Common.NodeProperties.member]).ToPublishedContent()); } //var CmMember = new ContentModels.Member(Udi.Parse(sRecord.Fields[Common.NodeProperties.member]).ToPublishedContent()); StringBuilder sbAuthor = new StringBuilder(); sbAuthor.Append(CmMember.FirstName); sbAuthor.Append(" "); sbAuthor.Append(CmMember.LastName); sbAuthor.Append("."); storyLink.memberName = sbAuthor.ToString(); storyLink.memberId = CmMember.Id; searchList.lstStoryLink.Add(storyLink); } } }
/// <summary> /// Executes the search. If the <paramref name="rootId"/> value is set the search will be executed for the site containing /// that content node only. /// </summary> /// <param name="rootId">The root id of the site to search within.</param> /// <returns>The <see cref="SearchResponse"/> containing the search results.</returns> public SearchResponse Execute(string rootId = "") { SearchResponse searchResponse = new SearchResponse(); UmbracoExamineSearcher searchProvider = (UmbracoExamineSearcher)ExamineManager.Instance.SearchProviderCollection[ZoombracoConstants.Search.SearcherName]; Analyzer analyzer = searchProvider.IndexingAnalyzer; // Wildcards are only supported using the languages using the standard analyzer. this.UseWildcards = this.UseWildcards && typeof(StandardAnalyzer) == analyzer.GetType(); IBooleanOperation searchCriteria = searchProvider.CreateSearchCriteria().OrderBy(string.Empty); if (!string.IsNullOrWhiteSpace(this.Query)) { string[] mergedFields = new string[this.Cultures.Length]; for (int i = 0; i < this.Cultures.Length; i++) { mergedFields[i] = string.Format(ZoombracoConstants.Search.MergedDataFieldTemplate, this.Cultures[i].Name); } if (this.UseWildcards) { searchCriteria = searchProvider .CreateSearchCriteria() .GroupedOr( mergedFields, this.Query.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).Select(w => w.Trim().MultipleCharacterWildcard()) .ToArray()); } else { searchCriteria = searchProvider .CreateSearchCriteria() .GroupedAnd(mergedFields, this.Query); } } if (this.Categories != null && this.Categories.Any()) { searchCriteria.And().Field(ZoombracoConstants.Search.CategoryField, string.Join(" ", this.Categories)); } if (!string.IsNullOrWhiteSpace(rootId)) { searchCriteria.And().Field(ZoombracoConstants.Search.SiteField, rootId); } if (searchCriteria != null) { ISearchResults searchResults = null; try { searchResults = searchProvider.Search(searchCriteria.Compile()); } catch (NullReferenceException) { // If the query object can't be compiled then an exception within Examine is raised } if (searchResults != null) { Formatter formatter = new SimpleHTMLFormatter("<strong>", "</strong>"); foreach (SearchResult searchResult in searchResults.Skip(this.Skip).Take(this.Take)) { foreach (CultureInfo culture in this.Cultures) { string fieldName = string.Format(ZoombracoConstants.Search.MergedDataFieldTemplate, culture.Name); string fieldResult = searchResult.Fields[fieldName]; this.AddSearchMatch(analyzer, formatter, searchResults, searchResponse, searchResult, fieldName, fieldResult); } } searchResponse.TotalCount = searchResults.TotalItemCount; } } return(searchResponse); }
private void ObtainByScripture(Models.SearchList searchList, int pageNo) { //Instantiate variables var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); searchList.ShowBible = true; searchList.SearchInTitle = "The Scriptures"; if (!string.IsNullOrWhiteSpace(searchList.SearchFor)) { //Get all prayers BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.ScriptureSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(IndexTypes.Content); ISearchResults searchResults = mySearcher.Search(searchList.SearchFor, true); //Get item counts and total experiences. searchList.Pagination.itemsPerPage = 30; searchList.Pagination.totalItems = searchResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.totalPages = (int)Math.Ceiling((double)searchList.Pagination.totalItems / (double)searchList.Pagination.itemsPerPage); } else { searchList.Pagination.itemsPerPage = searchList.Pagination.totalItems; searchList.Pagination.totalPages = 1; } //Determine current page number if (pageNo <= 0 || pageNo > searchList.Pagination.totalPages) { pageNo = 1; } searchList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.itemsToSkip = searchList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in searchResults.Skip(searchList.Pagination.itemsToSkip).Take(searchList.Pagination.itemsPerPage)) { var scriptureLink = new Models.ScriptureLink(); IPublishedContent ipArticle = umbracoHelper.TypedContent(sRecord.Id); scriptureLink.Id = ipArticle.Id; scriptureLink.Url = ipArticle.Parent.Url + "?chapter=" + ipArticle.Name; scriptureLink.Breadcrumb = GetBreadcrumbForScripture(ipArticle); searchList.lstBibleLinks.Add(scriptureLink); } } }
private void ObtainByArticle(Models.SearchList searchList, int pageNo) { //Instantiate variables var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); searchList.ShowArticles = true; searchList.SearchInTitle = "All Articles"; if (!string.IsNullOrWhiteSpace(searchList.SearchFor)) { //Get all prayers BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.ArticleSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(BooleanOperation.Or); //Setup up search fields by importance IBooleanOperation query = criteria.Field(Common.NodeProperties.title, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.subtitle, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.content, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.originalSource, searchList.SearchFor.MultipleCharacterWildcard()); //IBooleanOperation query = criteria.Field(Common.NodeProperties.title, searchList.SearchFor.Boost(3)); //query.Or().Field(Common.NodeProperties.subtitle, searchList.SearchFor.Boost(2)); //query.Or().Field(Common.NodeProperties.content, searchList.SearchFor.Boost(1)); //query.Or().Field(Common.NodeProperties.originalSource, searchList.SearchFor); //Obtain result with query ISearchResults searchResults = mySearcher.Search(query.Compile()); //Get item counts and total experiences. searchList.Pagination.totalItems = searchResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.totalPages = (int)Math.Ceiling((double)searchList.Pagination.totalItems / (double)searchList.Pagination.itemsPerPage); } else { searchList.Pagination.itemsPerPage = searchList.Pagination.totalItems; searchList.Pagination.totalPages = 1; } //Determine current page number if (pageNo <= 0 || pageNo > searchList.Pagination.totalPages) { pageNo = 1; } searchList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.itemsToSkip = searchList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in searchResults.Skip(searchList.Pagination.itemsToSkip).Take(searchList.Pagination.itemsPerPage)) { var msgLink = new Models.ArticleLink(); IPublishedContent ipArticle = umbracoHelper.TypedContent(sRecord.Id); msgLink.Id = ipArticle.Id; msgLink.Url = ipArticle.Url; msgLink.Breadcrumb = GetBreadcrumbForArticle(ipArticle); searchList.lstArticleLinks.Add(msgLink); } } }
private void ObtainByPrayerCorner(Models.SearchList searchList, int pageNo) { //Instantiate variables var memberShipHelper = new Umbraco.Web.Security.MembershipHelper(UmbracoContext.Current); searchList.ShowPrayers = true; searchList.SearchInTitle = "The Prayer Corner"; if (!string.IsNullOrWhiteSpace(searchList.SearchFor)) { // var CmPrayerList = new ContentModels.PrayerList(Umbraco.TypedContent((int)Common.siteNode.ThePrayerCorner)); //Get all prayers BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.PrayersSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(BooleanOperation.Or); //Setup up search fields by importance IBooleanOperation query = criteria.Field(Common.NodeProperties.prayerTitle, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.prayer, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.prayerRequestMember, searchList.SearchFor.MultipleCharacterWildcard()); //IBooleanOperation query = criteria.Field(Common.NodeProperties.prayerTitle, searchList.SearchFor.Boost(2)); //query.Or().Field(Common.NodeProperties.prayer, searchList.SearchFor.Boost(1)); //query.Or().Field(Common.NodeProperties.prayerRequestMember, searchList.SearchFor); //Obtain result with query ISearchResults searchResults = mySearcher.Search(query.Compile()); //Get total experiences. searchList.Pagination.itemsPerPage = 10; searchList.Pagination.totalItems = searchResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.totalPages = (int)Math.Ceiling((double)searchList.Pagination.totalItems / (double)searchList.Pagination.itemsPerPage); } else { searchList.Pagination.itemsPerPage = searchList.Pagination.totalItems; searchList.Pagination.totalPages = 1; } //Determine current page number if (pageNo <= 0 || pageNo > searchList.Pagination.totalPages) { pageNo = 1; } searchList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.itemsToSkip = searchList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in searchResults.Skip(searchList.Pagination.itemsToSkip).Take(searchList.Pagination.itemsPerPage)) { //Create new prayerLink class var prayerLink = new Models.PrayerLink(); prayerLink.Id = sRecord.Id; prayerLink.Title = sRecord.Fields[Common.NodeProperties.prayerTitle]; prayerLink.Url = Umbraco.NiceUrl(sRecord.Id); prayerLink.Date = Convert.ToDateTime(sRecord.Fields[Common.NodeProperties.requestDate]); //Determine current percentage prayerLink.currentPercentage = int.Parse(sRecord.Fields[Common.NodeProperties.currentPercentage]); prayerLink.baseCalculationDate = DateTime.Parse(sRecord.Fields[Common.NodeProperties.baseCalculationDate]); int daysSinceBaseDate = (DateTime.Now - prayerLink.baseCalculationDate).Days; if (daysSinceBaseDate > prayerLink.currentPercentage) { prayerLink.currentPercentage = 0; } else { prayerLink.currentPercentage = prayerLink.currentPercentage - daysSinceBaseDate; } //Determine proper candle based upon current percentage prayerLink.CandleUrl = CmPrayerList.CandleOut.Url; if (prayerLink.currentPercentage == 0) { prayerLink.CandleUrl = CmPrayerList.CandleOut.Url; } else if (prayerLink.currentPercentage >= 1 && prayerLink.currentPercentage <= 10) { prayerLink.CandleUrl = CmPrayerList.Candle10.Url; } else if (prayerLink.currentPercentage >= 11 && prayerLink.currentPercentage <= 20) { prayerLink.CandleUrl = CmPrayerList.Candle20.Url; } else if (prayerLink.currentPercentage >= 21 && prayerLink.currentPercentage <= 30) { prayerLink.CandleUrl = CmPrayerList.Candle30.Url; } else if (prayerLink.currentPercentage >= 31 && prayerLink.currentPercentage <= 40) { prayerLink.CandleUrl = CmPrayerList.Candle40.Url; } else if (prayerLink.currentPercentage >= 41 && prayerLink.currentPercentage <= 50) { prayerLink.CandleUrl = CmPrayerList.Candle50.Url; } else if (prayerLink.currentPercentage >= 51 && prayerLink.currentPercentage <= 60) { prayerLink.CandleUrl = CmPrayerList.Candle60.Url; } else if (prayerLink.currentPercentage >= 61 && prayerLink.currentPercentage <= 70) { prayerLink.CandleUrl = CmPrayerList.Candle70.Url; } else if (prayerLink.currentPercentage >= 71 && prayerLink.currentPercentage <= 80) { prayerLink.CandleUrl = CmPrayerList.Candle80.Url; } else if (prayerLink.currentPercentage >= 81 && prayerLink.currentPercentage <= 90) { prayerLink.CandleUrl = CmPrayerList.Candle90.Url; } else if (prayerLink.currentPercentage >= 91 && prayerLink.currentPercentage <= 100) { prayerLink.CandleUrl = CmPrayerList.Candle100.Url; } // IEnumerable <string> prayerSummary = sRecord.Fields[Common.NodeProperties.prayer].Split().Take(32); prayerLink.PrayerSummary = string.Join(" ", prayerSummary) + "..."; //Obtain member ContentModels.Member CmMember; int memberId; if (int.TryParse(sRecord.Fields[Common.NodeProperties.prayerRequestMember], out memberId)) { IPublishedContent ipMember = memberShipHelper.GetById(memberId); CmMember = new ContentModels.Member(ipMember); } else { CmMember = new ContentModels.Member(Udi.Parse(sRecord.Fields[Common.NodeProperties.prayerRequestMember]).ToPublishedContent()); } StringBuilder sbAuthor = new StringBuilder(); sbAuthor.Append(CmMember.FirstName); sbAuthor.Append(" "); sbAuthor.Append(CmMember.LastName); sbAuthor.Append("."); prayerLink.MemberName = sbAuthor.ToString(); // searchList.lstPrayerLinks.Add(prayerLink); //prayerLink.currentPercentage = int.Parse(sRecord.Fields[Common.NodeProperties.currentPercentage]); //IEnumerable<string> prayerSummary = sRecord.Fields[Common.NodeProperties.prayer].Split().Take(32); //prayerLink.PrayerSummary = string.Join(" ", prayerSummary) + "..."; ////Obtain member //ContentModels.Member CmMember; //int memberId; //if (int.TryParse(sRecord.Fields[Common.NodeProperties.prayerRequestMember], out memberId)) //{ // IPublishedContent ipMember = memberShipHelper.GetById(memberId); // CmMember = new ContentModels.Member(ipMember); //} //else //{ // CmMember = new ContentModels.Member(Udi.Parse(sRecord.Fields[Common.NodeProperties.prayerRequestMember]).ToPublishedContent()); //} //StringBuilder sbAuthor = new StringBuilder(); //sbAuthor.Append(CmMember.FirstName); //sbAuthor.Append(" "); //sbAuthor.Append(CmMember.LastName); //sbAuthor.Append("."); //prayerLink.MemberName = sbAuthor.ToString(); //searchList.lstPrayerLinks.Add(prayerLink); } } }
private void ObtainByMessagesFromHeaven(Models.SearchList searchList, int pageNo) { //Instantiate variables searchList.ShowMsgsFromHeaven = true; searchList.SearchInTitle = "Messages from Heaven"; if (!string.IsNullOrWhiteSpace(searchList.SearchFor)) { //Get all prayers BaseSearchProvider mySearcher = ExamineManager.Instance.SearchProviderCollection[Common.searchProviders.MessagesSearcher]; ISearchCriteria criteria = mySearcher.CreateSearchCriteria(BooleanOperation.Or); //Setup up search fields by importance IBooleanOperation query = criteria.Field(Common.NodeProperties.nodeName, searchList.SearchFor.MultipleCharacterWildcard()); query.Or().Field(Common.NodeProperties.subtitle, searchList.SearchFor.MultipleCharacterWildcard()); //IBooleanOperation query = criteria.Field(Common.NodeProperties.nodeName, searchList.SearchFor.Boost(1)); //query.Or().Field(Common.NodeProperties.subtitle, searchList.SearchFor); //Obtain result with query ISearchResults searchResults = mySearcher.Search(query.Compile()); //Get item counts and total experiences. searchList.Pagination.totalItems = searchResults.Count(); //Determine how many pages/items to skip and take, as well as the total page count for the search result. if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.totalPages = (int)Math.Ceiling((double)searchList.Pagination.totalItems / (double)searchList.Pagination.itemsPerPage); } else { searchList.Pagination.itemsPerPage = searchList.Pagination.totalItems; searchList.Pagination.totalPages = 1; } //Determine current page number if (pageNo <= 0 || pageNo > searchList.Pagination.totalPages) { pageNo = 1; } searchList.Pagination.pageNo = pageNo; //Determine how many pages/items to skip if (searchList.Pagination.totalItems > searchList.Pagination.itemsPerPage) { searchList.Pagination.itemsToSkip = searchList.Pagination.itemsPerPage * (pageNo - 1); } //Convert list of SearchResults to list of classes foreach (SearchResult sRecord in searchResults.Skip(searchList.Pagination.itemsToSkip).Take(searchList.Pagination.itemsPerPage)) { var msgLink = new Models.MsgLink(); msgLink.Id = sRecord.Id; msgLink.Title = sRecord.Fields[Common.NodeProperties.nodeName]; msgLink.Subtitle = sRecord.Fields[Common.NodeProperties.subtitle]; msgLink.Url = Umbraco.NiceUrl(sRecord.Id); //msgLink.Date = Convert.ToDateTime(sRecord.Fields[Common.NodeProperties.publishDate]); msgLink.Dates = (Convert.ToDateTime(sRecord.Fields[Common.NodeProperties.publishDate])).ToString("MMMM dd"); searchList.lstMsgsFromHeavenLinks.Add(msgLink); } } }
/// <summary> /// Take ISearchResults from examine, create title and body summary, and convert to an XML document /// This is broadly based off the same function in the Examine codebase, the XML it returns should be /// broadly compatible, that seems best... /// </summary> /// <returns>XPathNodeIterator to return to Umbraco XSLT foreach</returns> static XPathNodeIterator ResultsAsXml(ISearchResults searchResults, Summarizer Summarizer, int pageNumber = 0, int pageLength = 0, Stopwatch stopwatch = null) { var output = new XDocument(); var numNodesInSet = 0; var numResults = searchResults.TotalItemCount; if (numResults < 1) { return(ReturnError("NoResults", "Your search returned no results")); } IEnumerable <SearchResult> results; var toSkip = 0; if (pageLength > 0) { if (pageNumber > 1) { toSkip = (pageNumber - 1) * pageLength; } results = searchResults.Skip(toSkip).Take(pageLength); } else { results = searchResults.AsEnumerable(); } var rootNode = new XElement("results"); var nodesNode = new XElement("nodes"); var returnAllFieldsInXslt = Config.Instance.GetBooleanByKey("ReturnAllFieldsInXSLT"); foreach (var result in results) { var resultNumber = toSkip + numNodesInSet + 1; OnResultOutput(new ResultOutputEventArgs(result, pageNumber, resultNumber, numNodesInSet + 1)); var node = new XElement("node", new XAttribute("id", result.Id), new XAttribute("score", result.Score), new XAttribute("number", resultNumber) ); if (returnAllFieldsInXslt) { //Add all fields from index, you would think this would slow things //down, but it doesn't (that much) really, could be useful foreach (var field in result.Fields) { node.Add( new XElement("data", new XAttribute("alias", field.Key), new XCData(field.Value) )); } } //Add title (optionally highlighted) string title; Summarizer.GetTitle(result, out title); node.Add( new XElement("data", new XAttribute("alias", "FullTextTitle"), new XCData(title) )); //Add Summary(optionally highlighted) string summary; Summarizer.GetSummary(result, out summary); node.Add( new XElement("data", new XAttribute("alias", "FullTextSummary"), new XCData(summary) )); nodesNode.Add(node); numNodesInSet++; } if (numNodesInSet > 0) { rootNode.Add(nodesNode); var summary = new XElement("summary"); summary.Add(new XAttribute("numResults", numResults)); var numPages = numResults % pageLength == 0 ? numResults / pageLength : numResults / pageLength + 1; summary.Add(new XAttribute("numPages", numPages)); if (stopwatch != null) { stopwatch.Stop(); double millisecs = stopwatch.ElapsedMilliseconds; var numSecs = Math.Round((millisecs / 1000), 3); summary.Add(new XAttribute("timeTaken", numSecs)); } summary.Add(new XAttribute("firstResult", toSkip + 1)); var lastResult = toSkip + pageLength; if (lastResult > numResults) { lastResult = numResults; } summary.Add(new XAttribute("lastResult", lastResult)); rootNode.Add(summary); output.Add(rootNode); } else { return(ReturnError("NoPage", "Pagination incorrectly set up, no results on page " + pageNumber)); } return(output.CreateNavigator().Select("/")); }