コード例 #1
0
        /// <summary>
        /// Method to get listing model
        /// </summary>
        /// <param name="pageNumber">page number</param>
        /// <param name="pageSize">page size</param>
        /// <param name="filter">filter</param>
        /// <param name="parentItemId">Parent id when directly access Folder item</param>
        /// <returns>SearchResultsGeneric<ListingSearchResultItem> </returns>
        public SearchResultsGeneric <ListingSearchResultItem> GetListingModel(int pageNumber = -1, int pageSize = -1, string filter = "", string itemId = "", string listItemTemplateId = "", bool showFilters = false, string parentItemId = "")
        {
            List <SearchCondition> yearFolderparentSearchCondition = new List <SearchCondition>();

            listItemTemplateId = SearchHelper.FormatGuid(listItemTemplateId);
            SearchResultsGeneric <ListingSearchResultItem> resultsList       = new SearchResultsGeneric <ListingSearchResultItem>();
            SearchResultsGeneric <ListingSearchResultItem> parentResultsList = new SearchResultsGeneric <ListingSearchResultItem>();
            ID id = null;

            //This is used when the context item from folder template for SEO, so get its parent listing page as context item
            if (!string.IsNullOrEmpty(parentItemId) && !string.IsNullOrEmpty(filter))
            {
                Sitecore.Data.ID.TryParse(parentItemId, out id);
            }
            else//Context item id
            {
                Sitecore.Data.ID.TryParse(itemId, out id);
            }

            if (id.IsNull)
            {
                return(resultsList);
            }
            Item parent = null;

            if (!string.IsNullOrEmpty(parentItemId) && string.IsNullOrEmpty(filter))
            {
                //Filter from parent items
                parent = Sitecore.Context.Database.GetItem(parentItemId);
                yearFolderparentSearchCondition = new List <SearchCondition>
                {
                    new SearchCondition()
                    {
                        Name = CommonConstants.TemplateID, Value = listItemTemplateId, CompareType = CompareType.ExactMatch
                    },
                    new SearchCondition()
                    {
                        Name = Sitecore.ContentSearch.BuiltinFields.Path, Value = SearchHelper.FormatGuid(parentItemId.ToString()), CompareType = CompareType.ExactMatch
                    }
                };
            }
            //Filter current context item childs
            List <SearchCondition> conditions = new List <SearchCondition>
            {
                new SearchCondition()
                {
                    Name = CommonConstants.TemplateID, Value = listItemTemplateId, CompareType = CompareType.ExactMatch
                },
                new SearchCondition()
                {
                    Name = Sitecore.ContentSearch.BuiltinFields.Path, Value = SearchHelper.FormatGuid(id.ToString()), CompareType = CompareType.ExactMatch
                }
            };

            //Get Events of only current year
            if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.EventsTemplateID)))
            {
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.YearFacetField, Value = DateTime.UtcNow.Year.ToString(), CompareType = CompareType.ExactMatch
                });
            }
            yearFolderparentSearchCondition = SearchHelper.AddFilterConditions(filter, yearFolderparentSearchCondition);
            conditions = SearchHelper.AddFilterConditions(filter, conditions);
            List <Facet> facets = new List <Facet>();

            //Facets not required from second request,
            if (pageNumber <= 0 && showFilters)
            {
                // Add Year facet except events and downloads
                if (!listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.EventsTemplateID)) &&
                    !listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.DownloadItemTemplateID)))
                {
                    facets.Add(new Facet()
                    {
                        facetField = CommonConstants.YearFacetField, allLabel = Sitecore.Globalization.Translate.Text(CommonConstants.AllYearsKey), minCount = 1
                    });
                }

                // Add Categories facet except Image items (Image Album page)
                if (!listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.ImageItemTemplateID)))
                {
                    facets.Add(new Facet()
                    {
                        facetField = CommonConstants.CategoriesFacetField, allLabel = Sitecore.Globalization.Translate.Text(CommonConstants.AllCategoriesKey), minCount = 1
                    });
                }
            }


            //Sort Option
            if (parent != null && (parent.TemplateID.Equals(Sitecore.Data.ID.Parse(CommonConstants.NewsListingPageTemplateID)) ||
                                   parent.TemplateID.Equals(Sitecore.Data.ID.Parse(CommonConstants.EventsListingPageTemplateID)) ||
                                   parent.TemplateID.Equals(Sitecore.Data.ID.Parse(CommonConstants.ImageGalleryPageTemplateID)) ||
                                   parent.TemplateID.Equals(Sitecore.Data.ID.Parse(CommonConstants.VideoGalleryTemplateID)) ||
                                   parent.TemplateID.Equals(Sitecore.Data.ID.Parse(CommonConstants.VideoAlbumWithFiltersTemplateID))))
            {
                parentResultsList = _searchManager.GetSearchResults <ListingSearchResultItem>(yearFolderparentSearchCondition, facets, null, 0, 0, false, true, true);
                resultsList       = _searchManager.GetSearchResults <ListingSearchResultItem>(conditions, facets, null, pageNumber, pageSize, false, true);
            }
            else if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.NewsTemplateID)))
            {
                resultsList = _searchManager.GetSearchResults <ListingSearchResultItem>(conditions, facets, null, pageNumber, pageSize, false, true);
            }
            else if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.EventsTemplateID)))
            {
                resultsList = _searchManager.GetSearchResults <ListingSearchResultItem>(conditions, facets, null, pageNumber, pageSize, false, false, true);
            }
            else if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.DownloadItemTemplateID)))
            {
                SortOption sortOption = new SortOption()
                {
                    SortFieldName = CommonConstants.CustomSortorder,
                    SortOrder     = SortOrder.Ascending
                };
                resultsList = _searchManager.GetSearchResults <ListingSearchResultItem>(conditions, facets, sortOption, pageNumber, pageSize, false, false, false);
            }
            else
            {
                resultsList = _searchManager.GetSearchResults <ListingSearchResultItem>(conditions, facets, null, pageNumber, pageSize, true, false);
            }


            //Adding filter "Event Type"(Upcoming and Past events)
            if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.EventsTemplateID)) &&
                pageNumber <= 0 && resultsList != null && resultsList.filters != null)
            {
                List <FilterValues> filterValues = new List <FilterValues>
                {
                    new FilterValues()
                    {
                        id = CommonConstants.AllEvents, label = Sitecore.Globalization.Translate.Text(CommonConstants.AllEvents)
                    },
                    new FilterValues()
                    {
                        id = CommonConstants.Upcoming, label = Sitecore.Globalization.Translate.Text(CommonConstants.UpcomingEvents)
                    },
                    new FilterValues()
                    {
                        id = CommonConstants.Past, label = Sitecore.Globalization.Translate.Text(CommonConstants.PastEvents)
                    }
                };
                resultsList.filters.Add(new Filters()
                {
                    filterLabel = CommonConstants.EventType, filterValues = filterValues
                });
            }
            if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.ImageAlbumPageTemplateID)) ||
                listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.VideoAlbumWithoutFiltersTemplateID)) ||
                listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.VideoAlbumWithFiltersTemplateID)))
            {
                string contentItemTemplateId = string.Empty;
                if (listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.VideoAlbumWithoutFiltersTemplateID)) ||
                    listItemTemplateId.Equals(SearchHelper.FormatGuid(CommonConstants.VideoAlbumWithFiltersTemplateID)))
                {
                    contentItemTemplateId = CommonConstants.VideoItemTemplateID;
                }
                else
                {
                    contentItemTemplateId = CommonConstants.ImageItemTemplateID;
                }
            }
            //Changing the filter based on the template selected(whether it is folder page or listing page)
            if (!string.IsNullOrEmpty(parentItemId) && parentResultsList.filters != null)
            {
                resultsList.filters = parentResultsList.filters;
            }
            return(resultsList);
        }
コード例 #2
0
        /// <summary>
        /// Generic Search Method
        /// </summary>
        /// <param name="searchConditions">search conditions.</param>
        /// <param name="pageNo">Page Number.</param>
        /// <param name="pageSize">Page Size.</param>
        /// <returns>Search Results of Generic Type</returns>
        public SearchResultsGeneric <T> GetSearchResults <T>(List <SearchCondition> searchConditions, List <Facet> facetFields = null, SortOption sortOption = null, int pageNo = -1, int pageSize = -1, bool sortByYearAndOrder = false, bool sortByDateAndOrder = false, bool sortByDateAscAndOrder = false) where T : ListingSearchResultItem
        {
            searchConditions = SearchHelper.AddBasicSearchConditions(searchConditions);
            IProviderSearchContext       searchContext = SearchHelper.GetIndex().CreateSearchContext();
            Expression <Func <T, bool> > predicate     = SearchHelper.BuildPredicate <T>(searchConditions);
            IQueryable <T> searchQuery = null;

            if (sortByYearAndOrder)
            {
                searchQuery = searchContext.GetQueryable <T>(new CultureExecutionContext(Sitecore.Context.Language.CultureInfo)).Where(predicate).OrderBy(x => x[CommonConstants.CustomSortorder]).ThenByDescending(x => x[CommonConstants.YearFacetField]);
            }
            else if (sortByDateAscAndOrder)
            {
                searchQuery = searchContext.GetQueryable <T>(new CultureExecutionContext(Sitecore.Context.Language.CultureInfo)).Where(predicate).OrderBy(x => x[CommonConstants.CustomSortorder]).ThenBy(x => x[CommonConstants.DateField]);
            }
            else if (sortByDateAndOrder)
            {
                searchQuery = searchContext.GetQueryable <T>(new CultureExecutionContext(Sitecore.Context.Language.CultureInfo)).Where(predicate).OrderBy(x => x[CommonConstants.CustomSortorder]).ThenByDescending(x => x[CommonConstants.DateField]);
            }

            else if (sortOption != null)
            {
                // Pass CultureExecutionContext object to pick index analyzer for query
                if (sortOption.SortOrder.Equals(SortOrder.Descending))
                {
                    searchQuery = searchContext.GetQueryable <T>(new CultureExecutionContext(Sitecore.Context.Language.CultureInfo)).Where(predicate).OrderByDescending(x => x[sortOption.SortFieldName]);
                }
                else
                {
                    searchQuery = searchContext.GetQueryable <T>(new CultureExecutionContext(Sitecore.Context.Language.CultureInfo)).Where(predicate).OrderBy(x => x[sortOption.SortFieldName]);
                }
            }
            else
            {
                searchQuery = searchContext.GetQueryable <T>(new CultureExecutionContext(Sitecore.Context.Language.CultureInfo)).Where(predicate);
            }

            if (facetFields != null && facetFields.Any())
            {
                // Add facets to the search query
                foreach (Facet facet in facetFields)
                {
                    searchQuery = searchQuery.FacetOn(f => f[facet.facetField], facet.minCount);
                }
            }

            FacetResults             facets        = searchQuery.GetFacets();
            SearchResultsGeneric <T> searchResults = new SearchResultsGeneric <T>();

            if (pageNo == -1 && pageSize == -1)
            {
                searchResults.results = new Results <T>()
                {
                    results = searchQuery.ToList(), Totalcount = searchQuery.GetResults().Count()
                };
            }
            else
            {
                searchResults.results = new Results <T>()
                {
                    results = searchQuery.Page(pageNo, pageSize).ToList(), Totalcount = searchQuery.GetResults().Count()
                };
            }
            List <string> itemIdsList = new List <string>();

            if (facets != null && facets.Categories != null && facets.Categories.Any())
            {
                List <Filters> filters = new List <Filters>();
                foreach (FacetCategory category in facets.Categories)
                {
                    List <FilterValues> filterValuesList = new List <FilterValues>();
                    foreach (FacetValue val in category.Values)
                    {
                        bool parse = Guid.TryParse(val.Name, out Guid id);
                        if (parse && id != null)
                        {
                            itemIdsList.Add(val.Name);
                        }

                        filterValuesList.Add(new FilterValues()
                        {
                            id = val.Name, label = val.Name
                        });
                    }


                    filters.Add(new Filters()
                    {
                        filterLabel = category.Name, filterValues = filterValuesList
                    });
                }



                Dictionary <string, string> itemIdsWithValues = GetItemIdValues(itemIdsList);

                foreach (Filters filter in filters)
                {
                    foreach (FilterValues filterVal in filter.filterValues)
                    {
                        if (!string.IsNullOrWhiteSpace(itemIdsWithValues.SingleOrDefault(x => x.Key.Equals(filterVal.label)).Value))
                        {
                            filter.filterValues.SingleOrDefault(x => x.label.Equals(filterVal.label)).label = itemIdsWithValues.SingleOrDefault(x => x.Key.Equals(filterVal.label)).Value;
                        }
                    }

                    if (filter.filterLabel.Equals(CommonConstants.YearFacetField))
                    {
                        filter.filterValues = filter.filterValues.OrderByDescending(x => Convert.ToInt32(x.label)).ToList();
                    }
                    else
                    {
                        filter.filterValues = filter.filterValues.OrderBy(x => x.label).ToList();
                    }


                    if (facets.Categories.Any(x => x.Name.ToLower().Equals(filter.filterLabel.ToLower())))
                    {
                        string label = facetFields.SingleOrDefault(x => (x.facetField.Equals(facets.Categories.SingleOrDefault(y => y.Name.ToLower().Equals(filter.filterLabel.ToLower())).Name))).allLabel;
                        filter.filterValues.Insert(0, new FilterValues()
                        {
                            id = CommonConstants.AllValue, label = label
                        });
                    }
                }
                //Default filters
                searchResults.filters = filters;
            }

            return(searchResults);
        }
コード例 #3
0
        /// <summary>
        /// Method to get listing model
        /// </summary>
        /// <param name="pageNumber">page number</param>
        /// <param name="pageSize">page size</param>
        /// <returns>SearchResultsGeneric<ListingSearchResultItem> </returns>
        public SearchResultsGeneric <ListingSearchResultItem> GetSearchResultsModelObject(int pageNumber = -1, int pageSize = -1, string searchTerm = "*")
        {
            SearchResultsGeneric <ListingSearchResultItem> resultsList = new SearchResultsGeneric <ListingSearchResultItem>();
            List <SearchCondition> conditions = new List <SearchCondition>();

            if (searchTerm.Trim() != "*")
            {
                searchTerm = Regex.Replace(searchTerm, "[^0-9A-Za-z ]", "");
            }

            if (string.IsNullOrWhiteSpace(searchTerm.Trim()))
            {
                searchTerm = "*";
            }

            if (searchTerm == "*")
            {
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.TitleIndexField, Value = searchTerm, CompareType = CompareType.PartialMatch, AddORcondition = true
                });
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.IntroductionIndexField, Value = searchTerm, CompareType = CompareType.PartialMatch, AddORcondition = true
                });
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.ContentIndexField, Value = searchTerm, CompareType = CompareType.PartialMatch, AddORcondition = true
                });
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.RenderingsContentIndexField, Value = searchTerm, CompareType = CompareType.PartialMatch, AddORcondition = true
                });
            }
            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.TitleIndexField, Value = searchTerm, CompareType = CompareType.ExactMatch, AddORcondition = true
            });
            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.IntroductionIndexField, Value = searchTerm, CompareType = CompareType.ExactMatch, AddORcondition = true
            });
            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.ContentIndexField, Value = searchTerm, CompareType = CompareType.ExactMatch, AddORcondition = true
            });
            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.RenderingsContentIndexField, Value = searchTerm, CompareType = CompareType.ExactMatch, AddORcondition = true
            });

            if (searchTerm != "*")
            {
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.TitleIndexField, Value = searchTerm, CompareType = CompareType.StartsWith, AddORcondition = true
                });
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.IntroductionIndexField, Value = searchTerm, CompareType = CompareType.StartsWith, AddORcondition = true
                });
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.ContentIndexField, Value = searchTerm, CompareType = CompareType.StartsWith, AddORcondition = true
                });
                conditions.Add(new SearchCondition()
                {
                    Name = CommonConstants.RenderingsContentIndexField, Value = searchTerm, CompareType = CompareType.StartsWith, AddORcondition = true
                });
            }


            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.PageUrl, Value = string.Empty, CompareType = CompareType.IsNotNull
            });
            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.Title, Value = string.Empty, CompareType = CompareType.IsNotNull
            });
            conditions.Add(new SearchCondition()
            {
                Name = CommonConstants.Title, Value = string.Empty, CompareType = CompareType.IsNotEmpty
            });

            if (!string.IsNullOrWhiteSpace(SitecoreSettings.ExcludeTemplatesFromSearchPage))
            {
                foreach (string val in SitecoreSettings.ExcludeTemplatesFromSearchPage.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    conditions.Add(new SearchCondition()
                    {
                        Name = CommonConstants.TemplateID, Value = SearchHelper.FormatGuid(val), CompareType = CompareType.NotEquals
                    });
                }
            }
            if (!string.IsNullOrWhiteSpace(SitecoreSettings.ExcludeItemNamesFromSearchPage))
            {
                foreach (string val in SitecoreSettings.ExcludeItemNamesFromSearchPage.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    conditions.Add(new SearchCondition()
                    {
                        Name = CommonConstants.IndexNameField, Value = SearchHelper.FormatGuid(val), CompareType = CompareType.NotEquals
                    });
                }
            }

            conditions = SearchHelper.AddFilterConditions("", conditions);

            resultsList = _searchManager.GetSearchResults <ListingSearchResultItem>(conditions, null, null, pageNumber, pageSize, false, false);

            if (searchTerm != "*" && resultsList != null && resultsList.results != null && resultsList.results.results != null && resultsList.results.results.Count > 0)
            {
                int count = 0;
                foreach (var listItem in resultsList.results.results)
                {
                    resultsList.results.results[count].title       = HighlightKeywords(resultsList.results.results[count].title, searchTerm);
                    resultsList.results.results[count].description = HighlightKeywords(resultsList.results.results[count].description, searchTerm);
                    if (resultsList.results.results[count].description.Contains("<mark>"))
                    {
                        resultsList.results.results[count].description = GetFragment(resultsList.results.results[count].description);
                    }
                    else
                    {
                        resultsList.results.results[count].description = HighlightKeywords(resultsList.results.results[count].renderingsContent, searchTerm);
                        if (resultsList.results.results[count].description.Contains("<mark>"))
                        {
                            resultsList.results.results[count].description = GetFragment(resultsList.results.results[count].description);
                        }
                        else
                        {
                            resultsList.results.results[count].description = HighlightKeywords(resultsList.results.results[count].Content, searchTerm);
                            if (resultsList.results.results[count].description.Contains("<mark>"))
                            {
                                resultsList.results.results[count].description = GetFragment(resultsList.results.results[count].description);
                            }
                        }

                        if (!string.IsNullOrWhiteSpace(resultsList.results.results[count].description) &&
                            !resultsList.results.results[count].description.Contains("<mark>") &&
                            resultsList.results.results[count].description.Length > 150)
                        {
                            resultsList.results.results[count].description = resultsList.results.results[count].description.Substring(0, 150) + "...";
                        }
                    }
                    count++;
                }
            }

            return(resultsList);
        }
コード例 #4
0
        /// <summary>
        /// Get values for list of ids.
        /// </summary>
        /// <param name="itemIds">item ids</param>
        /// <returns>dictionary.</returns>
        public Dictionary <string, string> GetItemIdValues(List <string> allItemIds)
        {
            Dictionary <string, string> itemIdsWithValues = new Dictionary <string, string>();

            //Making batch wise calls to get search results for Ids
            int batch = 0;

            while (CommonConstants.BatchSize * batch <= allItemIds.Count)
            {
                List <string>          itemIds          = allItemIds.Skip(CommonConstants.BatchSize * batch).Take(CommonConstants.BatchSize).ToList();
                List <SearchCondition> searchFilters    = new List <SearchCondition>();
                List <string>          itemIdsFormatted = new List <string>();
                foreach (string id in itemIds)
                {
                    if (string.IsNullOrEmpty(id))
                    {
                        continue;
                    }

                    if (id.Contains("-"))
                    {
                        itemIdsFormatted.Add(id.Substring(0, id.IndexOf("-")));
                    }

                    itemIdsFormatted.Add(id);
                }
                if (itemIdsFormatted.Count <= 0)
                {
                    return(itemIdsWithValues);
                }

                searchFilters.Add(new SearchCondition()
                {
                    Name = CommonConstants.IndexIdField, Value = string.Join(",", itemIdsFormatted)
                });

                SearchResultsGeneric <ListingSearchResultItem> resultsPayload = GetSearchResults <ListingSearchResultItem>(searchFilters);

                if (resultsPayload != null && resultsPayload.results.Totalcount > 0)
                {
                    foreach (ListingSearchResultItem result in resultsPayload.results.results)
                    {
                        string id = SearchHelper.FormatGuid(result.ItemId.ToString());
                        if (!itemIdsWithValues.ContainsKey(id))
                        {
                            if (itemIds.Any(x => x.Contains(id + "-")))
                            {
                                id = itemIds.Single(x => x.Contains(id + "-"));
                            }

                            if (!string.IsNullOrWhiteSpace(result.title) && !result.title.Equals(CommonConstants.NameStandardValueToken))
                            {
                                itemIdsWithValues.Add(id, result.title);
                            }
                            else if (!string.IsNullOrWhiteSpace(result.value))
                            {
                                itemIdsWithValues.Add(id, result.value);
                            }
                            else
                            {
                                itemIdsWithValues.Add(id, result.Name);
                            }
                        }
                    }

                    if (itemIds.Any(x => x.Equals(CommonConstants.InvalidID)))
                    {
                        itemIdsWithValues.Add(CommonConstants.InvalidID, CommonConstants.NoneValue);
                    }
                }
                batch++;
            }
            return(itemIdsWithValues);
        }