Exemplo n.º 1
0
        // 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)));
        }
Exemplo n.º 2
0
        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)));
        }
Exemplo n.º 3
0
        // 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;
            }
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
        // 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);
        }