public static JXSearchProvider CreateProvider(JXSearchType t) { JXSearchProvider provider = null; switch (t) { case JXSearchType.Product: provider = new ProductSearchProvider(); break; default: provider = new KeywordSearchProvider(); break; } return(provider); }
public IActionResult AdvancedSearch(ProductSearchViewModel model) { if (model == null || !ModelState.IsValid) { return(Redirect($"/Search/Advanced/{LanguageStrings.Products}/")); } GetSearchId(model); KeywordSearchProvider searchProvider = new KeywordSearchProvider(_productProvider); KeywordSearchOptions options = new KeywordSearchOptions(model.SearchText ?? String.Empty) { MaximumSearchResults = Constants.MaximumProducts }; GetSearchId(model); options.SearchName = model.SearchName; // add additional search options foreach (CheckedViewItemModel item in model.ProductGroups) { if (item.Selected) { options.Properties.Add(item.Name, KeywordSearchProvider.ProductGroup); } } List <ProductPriceInfo> prices = new List <ProductPriceInfo>(); List <ProductPriceInfo> priceGroups = GetPriceGroups(); foreach (CheckedViewItemModel item in model.Prices) { if (item.Selected) { ProductPriceInfo priceGroup = priceGroups.Where(pg => pg.Text.Equals(item.Name)).FirstOrDefault(); if (priceGroup != null) { prices.Add(priceGroup); } } } if (prices.Count == 0) { prices.AddRange(priceGroups); } options.Properties.Add(KeywordSearchProvider.Price, prices); if (model.ContainsVideo) { options.Properties.Add(KeywordSearchProvider.ContainsVideo, true); } // perform the search, the results will be held in memory and shown on search page DefaultSearchThread.KeywordSearch(searchProvider, options); string cacheName = $"Product Search View Model {model.SearchName}"; _memoryCache.GetExtendingCache().Add(cacheName, new CacheItem(cacheName, model), true); return(Redirect($"/Search/Advanced/{LanguageStrings.Products}/{model.SearchName}/")); }