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)) }; }
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)); }
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 });