// Displays a search interface, listing search results from the entire index public IActionResult Index() { // Prepares a list of filter queries for the search request IList <string> filterQueries = InitializeFilterQueries(); // Configures the 'SearchParameters' object Microsoft.Azure.Search.Models.SearchParameters searchParams = ConfigureSearchParameters(filterQueries); // Returns all results on initial page load string searchString = "*"; // Prepares a view model used to hold the search results and search configuration AzureSearchViewModel model = new AzureSearchViewModel(); // Performs a search request on the specified Azure Search index with the configured 'SearchParameters' object DocumentSearchResult <Document> result = searchIndexClient.Documents.Search(searchString, searchParams); // Fills the corresponding view model with facets retrieved from the search query if (result.Facets != null) { foreach (var facet in result.Facets.Take(5)) { foreach (FacetResult value in facet.Value) { AddFacet(model, value, facet.Key); } } } // Fills the view model with search results and displays them in a corresponding view return(View("SearchIndex", PrepareSearchResultsViewModel(result, model))); }
public IActionResult Search(AzureSearchViewModel searchSettings) { // Prepares a list of filter queries for the search request IList <string> filterQueries = InitializeFilterQueries(); // Adds filter queries based on the selected options in the faceted navigation (coffee farm and region) IEnumerable <FacetViewModel> selectedCountries = searchSettings.FilterCountry?.Where(x => x.Selected); IEnumerable <FacetViewModel> selectedFarms = searchSettings.FilterFarm?.Where(x => x.Selected); if (selectedCountries.Any()) { filterQueries.Add(GetFilterQuery(selectedCountries, FACET_COFFEE_COUNTRY)); } if (selectedFarms.Any()) { filterQueries.Add(GetFilterQuery(selectedFarms, FACET_COFFEE_FARM)); } // Prepares the search parameters Microsoft.Azure.Search.Models.SearchParameters searchParams = ConfigureSearchParameters(filterQueries); // Gets the search text from the input string searchString = searchSettings.SearchString; // Performs the search request for the specified Azure Search index and parameters DocumentSearchResult <Document> result = searchIndexClient.Documents.Search(searchString, searchParams); // Fills or updates the faceted navigation options if (result.Facets != null) { foreach (FacetViewModel item in searchSettings.FilterCountry) { UpdateFacets(result.Facets[FACET_COFFEE_COUNTRY], item); } foreach (FacetViewModel item in searchSettings.FilterFarm) { UpdateFacets(result.Facets[FACET_COFFEE_FARM], item); } } // Displays the search results return(View("SearchIndex", PrepareSearchResultsViewModel(result, searchSettings))); }
// Adds a retrieved 'FacetResult' to the list of facets in the corresponding model private void AddFacet(AzureSearchViewModel model, FacetResult facetResult, string resultFacetKey) { FacetViewModel item = new FacetViewModel() { Name = $"{facetResult.Value} ({facetResult.Count})", Value = facetResult.Value.ToString() }; switch (resultFacetKey) { case FACET_COFFEE_COUNTRY: model.FilterCountry.Add(item); break; case FACET_COFFEE_FARM: model.FilterFarm.Add(item); break; default: break; } }
public ActionResult HandleSearchForm(AzureSearchViewModel model) { if (!ModelState.IsValid) { return(CurrentUmbracoPage()); } string searchPhrase = model.SearchPhrase; // If blank search, assume they want to search everything if (string.IsNullOrWhiteSpace(searchPhrase)) { searchPhrase = "*"; } model.SearchResult = AzureSearchHelper.Search(searchPhrase); //Set the data that will be used in the view TempData["AzureSearchViewModel"] = model; //All done - redirect to the current page return(RedirectToCurrentUmbracoPage()); }
// Fills a view model with retrieved search results and faceted navigation options private AzureSearchViewModel PrepareSearchResultsViewModel(DocumentSearchResult <Document> searchResult, AzureSearchViewModel model) { if (searchResult.Results.Count == 0) { model.SearchResults = null; return(model); } foreach (SearchResult <Document> result in searchResult.Results) { model.SearchResults.Add(new DocumentViewModel() { DocumentTitle = $"{result.Document["skuname"]}", DocumentShortDescription = $"{result.Document["skushortdescription"]}", Highlights = result.Highlights }); } return(model); }