Ejemplo n.º 1
0
        /// <summary>
        /// Runs the query.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="pageSize">Size of the page.</param>
        /// <param name="pageNumber">The page number.</param>
        /// <param name="sortField">The sort field.</param>
        /// <param name="sortDirection">The sort direction.</param>
        /// <returns>The key value pair of the running query.</returns>
        public virtual KeyValuePair <int, List <SitecoreItem> > RunQuery(
            Query query, int pageSize, int pageNumber, string sortField, string sortDirection)
        {
            var items = new List <SitecoreItem>();

            if (Config.EnableBucketDebug || Constants.EnableTemporaryBucketDebug)
            {
                Log.Info("Bucket Debug Query: " + query, this);
            }

            if (Config.SolrEnabled == "true")
            {
                GetValue(query, items);
                return(new KeyValuePair <int, List <SitecoreItem> >(items.Count, items));
            }

            if (Index is Index)
            {
                (Index as Index).Analyzer = new StandardAnalyzer(Consts.StopWords);
            }

            int hitCount;

            using (var context = new SortableIndexSearchContext(Index))
            {
                BooleanQuery.SetMaxClauseCount(Config.LuceneMaxClauseCount);
                bool       sortingDir = sortDirection != "asc";
                SearchHits searchHits = string.IsNullOrWhiteSpace(sortField)
                                  ? context.Search(query)
                                  : context.Search(query, new Sort(sortField, sortingDir));
                if (searchHits.IsNull())
                {
                    return(new KeyValuePair <int, List <SitecoreItem> >());
                }

                hitCount = searchHits.Length;
                if (pageSize == 0 || pageNumber < 1)
                {
                    pageSize   = searchHits.Length;
                    pageNumber = 1;
                }

                SearchResultCollection resultCollection = searchHits.FetchResults((pageNumber - 1) * pageSize, pageSize);

                SearchHelper.GetItemsFromSearchResult(resultCollection, items);
            }

            return(new KeyValuePair <int, List <SitecoreItem> >(hitCount, items));
        }