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);
        }
Exemple #2
0
        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>()
            };
        }
Exemple #4
0
 public MultiFacetSearchResults(ISearchContext searchContext, MultiFacetRequest request)
     : base(searchContext)
 {
     PerformSearch(request);
 }