Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 public override void Process(InitQueryArgs args)
 {
     args.SearchSecurityOption = (args.TabItem?.ApplySecurity ?? false) ?
                                 SearchSecurityOptions.EnableSecurityCheck :
                                 SearchSecurityOptions.DisableSecurityCheck;
 }
Exemplo n.º 3
0
        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);
            }
        }