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); } }
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); }
public ActionResult Index(AdminSearchQuery model) { ViewData["results"] = _adminSearchService.Search(model); return View(model); }