Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }
Beispiel #5
0
        private void AddFacet(List <FacetGroupOption> facetGroups, TermsFacet termsFacet, FacetGroupOption facetGroupOption, string facetGroup)
        {
            var facet = GetFacet(termsFacet, facetGroupOption, facetGroup);

            if (facet != null)
            {
                facetGroups.Add(facet);
            }
        }
Beispiel #6
0
        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);
        }