public IPagedList<AdminSearchResult> Search(AdminSearchQuery searchQuery)
        {
            int pageSize = _siteSettings.DefaultPageSize;
            using (MiniProfiler.Current.Step("Search for results"))
            {
                IndexSearcher searcher = _universalSearchIndexManager.GetSearcher();
                var query = new BooleanQuery();
                if (!string.IsNullOrWhiteSpace(searchQuery.Term))
                {
                    query.Add(GetFilterByTerm(searchQuery.Term));
                }
                if (!string.IsNullOrWhiteSpace(searchQuery.Type))
                {
                    query.Add(FilterByEntityType(searchQuery.Type));
                }

                if (searchQuery.CreatedOnFrom.HasValue || searchQuery.CreatedOnTo.HasValue)
                {
                    query.Add(GetDateQuery(searchQuery));
                }
                TopDocs topDocs = GetTopDocs(searchQuery, searcher, query, pageSize);

                List<UniversalSearchItem> universalSearchItems =
                    GetUniversalSearchItems(searchQuery, topDocs, pageSize, searcher);

                List<AdminSearchResult> adminSearchResults;
                using (MiniProfiler.Current.Step("Get Results"))
                    adminSearchResults = universalSearchItems.Select(item =>
                    {
                        Type systemType = TypeHelper.GetTypeByName(item.SystemType);
                        var entity = _session.Get(systemType, item.Id) as SystemEntity;
                        return new AdminSearchResult(item, entity);
                    }).ToList();

                return new StaticPagedList<AdminSearchResult>(adminSearchResults, searchQuery.Page, pageSize,
                    topDocs.TotalHits);
            }
        }
Beispiel #2
0
 public IPagedList<AdminSearchResult> Search(AdminSearchQuery model)
 {
     return _universalSearchIndexSearcher.Search(model);
 }
 private List<UniversalSearchItem> GetUniversalSearchItems(AdminSearchQuery searchQuery, TopDocs topDocs, int pageSize, IndexSearcher searcher)
 {
     using (MiniProfiler.Current.Step("Get Search Items"))
         return topDocs.ScoreDocs.Skip(pageSize * (searchQuery.Page - 1))
             .Select(doc => _searchConverter.Convert(searcher.Doc(doc.Doc)))
             .ToList();
 }
 private BooleanClause GetDateQuery(AdminSearchQuery searchQuery)
 {
     return new BooleanClause(new TermRangeQuery(UniversalSearchFieldNames.CreatedOn,
         searchQuery.CreatedOnFrom.HasValue ? DateTools.DateToString(searchQuery.CreatedOnFrom.Value, DateTools.Resolution.SECOND) : null,
         searchQuery.CreatedOnTo.HasValue ? DateTools.DateToString(searchQuery.CreatedOnTo.Value, DateTools.Resolution.SECOND) : null,
         searchQuery.CreatedOnFrom.HasValue,
         searchQuery.CreatedOnTo.HasValue
         ), Occur.MUST);
 }
 private static TopDocs GetTopDocs(AdminSearchQuery searchQuery, IndexSearcher searcher, BooleanQuery query, int pageSize)
 {
     using (MiniProfiler.Current.Step("Get Top Docs"))
         return searcher.Search(query, pageSize * searchQuery.Page);
 }
Beispiel #6
0
        public ActionResult Index(AdminSearchQuery model)
        {
            ViewData["results"] = _adminSearchService.Search(model);

            return View(model);
        }