private MultiFacetRequest BuildRequest(int maxResults) { var request = new MultiFacetRequest { Query = Query, Sort = SortFields.ToList(), MaxResults = maxResults, Config = FacetSearcherConfiguration.Default(), Facets = new List <FacetFieldInfo>() }; foreach (var field in Fields) { if (field.MinHits > 0) { request.Config.MinimumCountInTotalDatasetForFacet = field.MinHits; } var fieldInfo = new FacetFieldInfo { FieldName = field.Name, MaxToFetchExcludingSelections = field.MaxCount }; if (field.Values != null) { fieldInfo.Selections = field.Values.ToList(); } request.Facets.Add(fieldInfo); } return(request); }
public void PerformSearch(MultiFacetRequest request) { using (var multiSearcher = new FacetSearcher(Searcher.IndexReader, request.Config)) { if (request.Sort.Any() == true) { var collector = TopFieldCollector.Create( new Sort(request.Sort.ToArray()), request.MaxResults, false, false, false, false); multiSearcher.Search(request.Query, collector); _scoreDocs = collector.TopDocs().ScoreDocs; } else { var collector = TopScoreDocCollector.Create(request.MaxResults, true); multiSearcher.Search(request.Query, collector); _scoreDocs = collector.TopDocs().ScoreDocs; } var results = multiSearcher.SearchWithFacets(request.Query, request.MaxResults, request.Facets); foreach (var facet in results.Facets.GroupBy(x => x.FacetFieldName)) { Facets.Add(facet.Key, CreateFacetResult(facet.ToList())); } TotalItemCount = results.Hits.TotalHits; } }
public MultiFacetQuery(ISearchContext searchContext, string category, Analyzer analyzer, string[] fields, LuceneSearchOptions searchOptions, BooleanOperation occurance) : base(searchContext, category, analyzer, fields, searchOptions, occurance) { _searchContext = searchContext; _request = new MultiFacetRequest { Query = Query, Sort = SortFields, Config = FacetSearcherConfiguration.Default(), Facets = new List <FacetFieldInfo>() }; }
public MultiFacetSearchResults(ISearchContext searchContext, MultiFacetRequest request) : base(searchContext) { PerformSearch(request); }