예제 #1
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="query"></param>
 /// <param name="filter"></param>
 /// <param name="readerCreator"></param>
 /// <param name="sort"></param>
 /// <param name="options"></param>
 /// <param name="dataRepository"></param>
 /// <param name="structRepository"></param>
 /// <param name="loadedHandle"></param>
 internal SearchResult(global::Lucene.Net.Search.Query query, global::Lucene.Net.Search.Filter filter, Func <global::Lucene.Net.Index.IndexReader> readerCreator, global::Lucene.Net.Search.Sort sort, SearchOptions options, IDataRepository dataRepository, ISchemeRepository structRepository, EventHandler <SearchResultLoadEventArgs> loadedHandle)
 {
     _query            = query;
     _filter           = filter;
     _readerCreator    = readerCreator;
     _sort             = sort;
     _options          = options;
     _dataRepository   = dataRepository;
     _structRepository = structRepository;
     _loadedHandle     = loadedHandle;
 }
예제 #2
0
        /// <summary>
        /// Executa a pesquisa
        /// </summary>
        /// <returns></returns>
        private Collector ExecuteSearch(int pageIndex)
        {
            Collector        collector = null;
            TopDocsCollector result    = null;
            var totalHits = _options.RandomResult ? 1 : (pageIndex + 1) * (_options.HitsPerPage > 0 ? _options.HitsPerPage : 50);

            if (totalHits == 0)
            {
                totalHits = 1;
            }
            global::Lucene.Net.Search.Query query = _query;
            if (_sort != null && query == null)
            {
                var parser = new global::Lucene.Net.QueryParsers.QueryParser(global::Lucene.Net.Util.Version.LUCENE_29, "test", new global::Lucene.Net.Analysis.Standard.StandardAnalyzer(global::Lucene.Net.Util.Version.LUCENE_29, Stopwords.PORTUGUESE_SET));
                query  = parser.Parse("test:1");
                result = TopFieldCollector.create(_sort, totalHits, true, false, false, true);
            }
            if (query != null)
            {
                var weight = query.Weight(Searcher);
                collector = result = TopFieldCollector.create(_sort, totalHits, true, false, false, !weight.ScoresDocsOutOfOrder());
                if (_options.RandomResult)
                {
                    collector = new RandomCollectorWrapper(this, this.Searcher, result);
                }
                else if (_channelFields == null || _channelFields.Length == 0)
                {
                    collector = new SummaryCollectorWrapper(this, this.Searcher, result);
                }
                this.Searcher.Search(weight, _filter, collector);
                if (collector is SummaryCollectorWrapper)
                {
                    var sCollector = ((SummaryCollectorWrapper)collector);
                    _summaries     = sCollector.GetSummaries().ToList();
                    _channelFields = sCollector.GetChannelsFields().ToArray();
                }
                if (collector is RandomCollectorWrapper)
                {
                    var wrapper       = (RandomCollectorWrapper)collector;
                    var wrapperResult = wrapper.GetResult();
                    _result = wrapperResult is Element[] ? (Element[])wrapperResult : wrapperResult.ToArray();
                    _count  = _result.Length;
                    OnLoad();
                    return(null);
                }
                _count = result.GetTotalHits();
                OnLoad();
                return(result);
            }
            else
            {
                SummaryCollectorWrapper wrapper = null;
                if (_options.RandomResult)
                {
                    wrapper = new RandomCollectorWrapper(this);
                    _result = ((RandomCollectorWrapper)wrapper).GetResult().ToArray();
                }
                else
                {
                    collector      = wrapper = new SummaryCollectorWrapper(this);
                    _channelFields = wrapper.GetChannelsFields().ToArray();
                }
                _count     = wrapper.GetTotalHits();
                _summaries = wrapper.GetSummaries().ToList();
                OnLoad();
                return(wrapper);
            }
        }