public override void Process(InitQueryArgs args) { if (!string.IsNullOrWhiteSpace(args.IndexName)) { return; } // default args.IndexName = "sitecore_web_index"; var index = args.TabItem?.IndexName; if (string.IsNullOrWhiteSpace(index)) { return; } args.IndexName = index; }
public override void Process(InitQueryArgs args) { args.SearchSecurityOption = (args.TabItem?.ApplySecurity ?? false) ? SearchSecurityOptions.EnableSecurityCheck : SearchSecurityOptions.DisableSecurityCheck; }
public SearchResponse PerformSearch(TabItem tab, SearchParameters parameters) { Assert.ArgumentNotNull(tab, nameof(tab)); Assert.ArgumentNotNull(parameters, nameof(parameters)); // Init Query var initArgs = new InitQueryArgs { TabItem = tab, SearchParameters = parameters }; CorePipeline.Run(Pipeline.InitQuery, initArgs); Assert.ArgumentNotNullOrEmpty(initArgs.IndexName, nameof(initArgs.IndexName)); var searchIndex = ContentSearchManager.GetIndex(initArgs.IndexName); using (var context = searchIndex.CreateSearchContext(initArgs.SearchSecurityOption)) { var query = context.GetQueryable <SearchResultItem>(); var watch = System.Diagnostics.Stopwatch.StartNew(); // Build Query var queryArgs = new BuildQueryArgs { TabItem = tab, SearchParameters = parameters, Query = query, SearchContext = context }; CorePipeline.Run(Pipeline.BuildQuery, queryArgs); query = queryArgs.Query; // Apply Selected Facets var selectedFacets = GetSelectedFacets(parameters.SelectedFacets, tab.Facets); var finalQuery = ApplySelectedFacets(query, selectedFacets, parameters); // Add common (unselected) facet-ons to lessen additional queries var unselectedFacets = GetUnselectedFacets(parameters.SelectedFacets, tab.Facets); finalQuery = ApplyFacetOn(finalQuery, unselectedFacets, parameters); // Execute var results = finalQuery.Cast <NimbleSearchResultItem>().GetResults(); // Correct facet counts (for selected facets only) var facets = CorrectFacetCounts(query, selectedFacets, parameters, results.Facets?.Categories); watch.Stop(); // Map Results var resultArgs = new MapResultArgs { TabItem = tab, SearchParameters = parameters, TotalSearchResults = results.TotalSearchResults, Hits = results.Hits, FacetResults = facets, QueryDuration = watch.ElapsedMilliseconds }; CorePipeline.Run(Pipeline.MapResult, resultArgs); return(resultArgs.Response); } }