public void Search_ShouldReturnPopulatedFacetGroupOption() { var content = new NodeContent(); var filterOptions = new FilterOptionViewModel { FacetGroups = new List <FacetGroupOption>() }; var result = _subject.Search(content, filterOptions); var facetGroupOption = result.FacetGroups.First(); var expected = new FacetGroupOption { GroupName = "FacetGroupName", GroupFieldName = "FacetGroupFieldName", Facets = new List <FacetOption> { new FacetOption { Name = _facet.Name, Key = _facet.Key, Selected = _facet.IsSelected, Count = _facet.Count } } }; facetGroupOption.Should().BeEquivalentTo(expected); }
private FacetGroupOption GetFacet(TermsFacet termsFacet, FacetGroupOption facetGroupOption, string facetGroup) { if (!termsFacet.Any(f => f != null && f.Count > 0)) { return(null); } var termFacetGroup = new FacetGroupOption { GroupFieldName = facetGroup, GroupName = facetGroup, Facets = new List <FacetOption>() }; foreach (TermCount term in termsFacet) { if (term.Count > 0) { termFacetGroup.Facets.Add(new FacetOption { Name = term.Term, Selected = facetGroupOption != null && facetGroupOption.Facets.Any(fo => fo.Selected && fo.Key.Equals(term.Term)), Count = term.Count, Key = term.Term }); } } return(termFacetGroup); }
private List <FacetGroupOption> CreateFacetGroups(string facets, IContent content) { var facetGroups = new List <FacetGroupOption>(); if (string.IsNullOrEmpty(facets)) { return(facetGroups); } foreach (var rawFacet in facets.Split(new[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries)) { var parsedFacet = rawFacet.Split(new[] { ':' }, System.StringSplitOptions.RemoveEmptyEntries); var facetGroupName = parsedFacet[0]; var facetKey = parsedFacet[1]; var facetGroup = new FacetGroupOption(); facetGroup.GroupName = facetGroupName; facetGroup.GroupFieldName = facetGroupName; facetGroup.Facets = new List <FacetOption>(); facetGroup.Facets.Add(new FacetOption() { Name = facetKey, Key = facetKey, Selected = true }); facetGroups.Add(facetGroup); } return(facetGroups); }
public override void PopulateFacet(FacetGroupOption facetGroupOption, Facet facet, string selectedFacets) { var numericRangeFacet = facet as NumericRangeFacet; if (numericRangeFacet == null) { return; } facetGroupOption.Facets = numericRangeFacet.Ranges.Select(x => new FacetOption { Count = x.Count, Key = $"{facet.Name}:{GetKey(x)}", Name = GetDisplayText(x), Selected = selectedFacets != null && selectedFacets.Contains($"{facet.Name}:{GetKey(x)}") }).ToList(); }
private void AddFacet(List <FacetGroupOption> facetGroups, TermsFacet termsFacet, FacetGroupOption facetGroupOption, string facetGroup) { var facet = GetFacet(termsFacet, facetGroupOption, facetGroup); if (facet != null) { facetGroups.Add(facet); } }
public CustomSearchResult Search(IContent currentContent, FilterOptionViewModel filterOptions) { var returnResult = new CustomSearchResult(); var searchClient = SearchClient.Instance.Search <FashionProduct>(); var pageSize = filterOptions.PageSize > 0 ? filterOptions.PageSize : _defaultPageSize; var query = searchClient.For(filterOptions.Q) .InAllField() .TermsFacetFor(x => x.Gender()) .TermsFacetFor(x => x.CategoryCode()) .TermsFacetFor(x => x.Brand) .TermsFacetFor(x => x.AvailableColors) .PublishedInCurrentLanguage() .Skip(pageSize * (filterOptions.Page - 1)) .Take(pageSize); if (currentContent != null && currentContent.GetOriginalType() != typeof(SearchPage)) { query = query.Filter(x => x.Ancestors().Match(currentContent.ContentLink.ToReferenceWithoutVersion().ToString())); } //Pre-checked Facets foreach (var filter in filterOptions.FacetGroups) { var filterValue = filter.Facets.FirstOrDefault().Key; switch (filter.GroupFieldName) { case SearchFilterField.Color: query = query.Filter(x => x.AvailableColors.MatchCaseInsensitive(filterValue)); break; case SearchFilterField.Brand: query = query.Filter(x => x.Brand.MatchCaseInsensitive(filterValue)); break; case SearchFilterField.Gender: query = query.Filter(x => x.Gender().MatchCaseInsensitive(filterValue)); break; case SearchFilterField.Category: query = query.Filter(x => x.CategoryCode().MatchCaseInsensitive(filterValue)); break; } } //Sorting var sortOrder = GetSortOrder().FirstOrDefault(x => x.Name.ToString() == filterOptions.Sort) ?? GetSortOrder().First(); switch (sortOrder.Name) { case ProductSortOrder.NewestFirst: query = query.OrderByDescending(x => x.Created); break; case ProductSortOrder.PriceAsc: query = query.OrderBy(x => x.DiscountPrice().Amount); break; } var results = query.GetContentResult(); var returnFacets = new List <FacetGroupOption>(); foreach (var findFacet in results.Facets) { var termFacet = findFacet as TermsFacet; if (termFacet != null) { var facetGroupOption = new FacetGroupOption() { GroupFieldName = termFacet.Name, GroupName = GetFriendlyFacetName(termFacet.Name), Facets = termFacet.Terms.Select(x => new FacetOption() { Name = x.Term, Count = x.Count, Key = x.Term, Selected = IsSelectedFacet(termFacet.Name, x.Term, filterOptions) }).ToList() }; returnFacets.Add(facetGroupOption); } } returnResult.FacetGroups = returnFacets; returnResult.ProductViewModels = CreateProductViewModels(results); returnResult.TotalCount = results.SearchResult.TotalMatching; return(returnResult); }