public virtual async Task <IHttpActionResult> GetSearchResultsBySkus(GetSearchResultsBySkusRequest request) { if (request.Skus == null) { return(BadRequest($"{nameof(request.Skus)} cannot be empty")); } var queryString = HttpUtility.ParseQueryString(request.QueryString ?? ""); var SelectedFacets = SearchUrlProvider.BuildSelectedFacets(queryString).ToList(); var Keywords = queryString[SearchRequestParams.Keywords]; var BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(); var IncludeFactes = request.IncludeFacets; var searchCriteria = await BaseSearchCriteriaProvider.GetSearchCriteriaAsync(Keywords, BaseUrl, IncludeFactes).ConfigureAwait(false); var searchBySkusCriteria = new SearchBySkusCriteria { Skus = request.Skus, Keywords = searchCriteria.Keywords, NumberOfItemsPerPage = request.Skus.Length, StartingIndex = searchCriteria.StartingIndex, Page = searchCriteria.Page, BaseUrl = searchCriteria.BaseUrl, Scope = searchCriteria.Scope, CultureInfo = searchCriteria.CultureInfo, InventoryLocationIds = searchCriteria.InventoryLocationIds, AvailabilityDate = searchCriteria.AvailabilityDate, IncludeFacets = searchCriteria.IncludeFacets }; searchBySkusCriteria.SelectedFacets.AddRange(SelectedFacets); var viewModel = await SearchViewService.GetSearchViewModelAsync(searchBySkusCriteria).ConfigureAwait(false); if (IncludeFactes) { viewModel.ProductSearchResults.Facets = viewModel.ProductSearchResults.Facets.Where(f => !f.FieldName.StartsWith(SearchConfiguration.CategoryFacetFiledNamePrefix)).ToList(); } return(Ok(viewModel)); }
protected virtual Query CreateQuery(SearchBySkusCriteria searchBySkusCriteria) { var skus = searchBySkusCriteria.Skus.Select(s => $"Sku:{s}").ToList(); var customExpr = String.Join(" OR ", skus); return(new Query { Filter = new FilterGroup { BinaryOperator = BinaryOperator.And, Filters = new List <Filter> { new Filter { Member = "Sku", CustomExpression = customExpr, Operator = Operator.Custom } } } }); }