private async Task BuildOtherSearchResultAsync(SearchResultViewModel searchResult, SearchQuery searchQuery)
        {
            var p = searchQuery.PageSize;

            searchQuery.PageNumber = 1;
            searchQuery.PageSize   = 100;

            var pageSearchResult = await _pageSearchService.SearchAsync(searchQuery, includeScore : true);

            var categorySearchResult = await _categorySearchService.SearchAsync(searchQuery, includeScore : true);

            searchQuery.PageSize           = p;
            searchResult.OtherSearchResult = new SearchResult
            {
                PageSize = 100,
                Total    = (pageSearchResult?.Total ?? 0) + (categorySearchResult?.Total ?? 0),
                Items    = new Lazy <IEnumerable <SearchResultItem> >(() => (
                                                                          pageSearchResult == null
                    ? Array.Empty <SearchResultItem>()
                    : pageSearchResult.Items.Value
                                                                          ).Concat(
                                                                          categorySearchResult == null
                        ? Array.Empty <SearchResultItem>()
                        : categorySearchResult.Items.Value).OrderByDescending(x => x.Score))
            };
        }
Exemplo n.º 2
0
        public override Task <SearchResult> QueryCompactAsync(string query, bool includeScore = false)
        {
            var searchQuery = _requestModelAccessor.RequestModel.SearchQuery.Clone();

            searchQuery.Text       = query;
            searchQuery.PageNumber = 1;
            searchQuery.PageSize   = PageSize;

            return(_categorySearchService.SearchAsync(searchQuery, includeScore: includeScore));
        }
Exemplo n.º 3
0
        public override async Task <SearchResult> SearchAsync(SearchQuery searchQuery, bool includeScore = false)
        {
            if (!_searchClientService.IsConfigured)
            {
                return(await _parent.SearchAsync(searchQuery));
            }

            var assortmentSystemId = _requestModelAccessor.RequestModel.ChannelModel?.Channel?.MarketSystemId?.MapTo <MarketModel>()?.Market?.AssortmentSystemId;
            var response           = await _searchClientService
                                     .SearchAsync <CategoryDocument>(CultureInfo.CurrentCulture, selector => selector
                                                                     .From((searchQuery.PageNumber - 1) * searchQuery.PageSize)
                                                                     .Size(searchQuery.PageSize)
                                                                     .QueryWithPermission(q =>
                                                                                          q.PublishedOnChannel() &&
                                                                                          q.Bool(b => b.Must(bf => bf.Term(t => t.Field(x => x.Assortment).Value(assortmentSystemId)))) &&
                                                                                          OrganizationPointer(q) &&
                                                                                          (
                                                                                              q.Match(x => x.Field(z => z.Name).Query(searchQuery.Text).Fuzziness(Fuzziness.Auto).Boost(2).SynonymAnalyzer()) ||
                                                                                              q.Match(x => x.Field(z => z.Content).Query(searchQuery.Text).Fuzziness(Fuzziness.Auto).SynonymAnalyzer())
                                                                                          ))
                                                                     .Source(x => x.Includes(z => z.Fields(p => p.CategorySystemId)))
                                                                     );

            return(Transform(searchQuery, unchecked ((int)response.Total), () =>
            {
                var category = _categoryService.Get(response.Hits.Select(x => x.Source.CategorySystemId));
                var categoryLookup = includeScore ? response.Hits.ToDictionary(x => x.Source.CategorySystemId, x => x.Score.GetValueOrDefault()) : null;

                return category.Select(x => new CategorySearchResult
                {
                    Item = x,
                    Id = x.SystemId,
                    Name = x.Localizations.CurrentCulture.Name,
                    Url = _urlService.GetUrl(x),
                    Score = includeScore ? categoryLookup.TryGetValue(x.SystemId, out var dbl) ? (float)dbl : default : default
                });