Пример #1
0
        /// <summary>
        /// Converte os dados de sort para serem usados pelo Lucene.
        /// </summary>
        /// <param name="sort"></param>
        /// <param name="sortFields">Campos de ordenação adicionais</param>
        /// <returns></returns>
        private global::Lucene.Net.Search.Sort Convert(Sort sort, global::Lucene.Net.Search.SortField[] sortFields)
        {
            global::Lucene.Net.Search.Sort luceneSort;
            var fields = new List <global::Lucene.Net.Search.SortField>();

            if (sort == null && sortFields != null && sortFields.Length > 0)
            {
                fields.AddRange(sortFields);
            }
            if (sort != null && sort.Fields.Length > 0)
            {
                fields.AddRange(sort.Fields.Select(f => {
                    SchemeField field = null;
                    if (f.Name == "Rnd")
                    {
                        field = new SchemeField("Rnd", typeof(int), "Rnd", false, false);
                    }
                    else
                    {
                        field = _structRepository.GetSchemaField(f.Name);
                    }
                    Type fieldType = null;
                    if (field == null)
                    {
                        if (f.Name.EndsWith("Ticks"))
                        {
                            var name = f.Name.Substring(0, f.Name.Length - "Ticks".Length);
                            field    = _structRepository.GetSchemaField(name);
                            if (field == null)
                            {
                                return(null);
                            }
                            fieldType = typeof(long);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        fieldType = field.Type;
                    }
                    return(new global::Lucene.Net.Search.SortField(f.Name, GetLuceneSortType(fieldType), f.Reverse));
                }).Where(f => f != null));
            }
            if (fields.Count > 0)
            {
                luceneSort = new global::Lucene.Net.Search.Sort(fields.ToArray());
            }
            else
            {
                luceneSort = new global::Lucene.Net.Search.Sort();
            }
            return(luceneSort);
        }
Пример #2
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;
 }
Пример #3
0
        /// <summary>
        /// Realiza uma pesquisa no sistema.
        /// </summary>
        /// <param name="text"></param>
        /// <param name="options"></param>
        /// <param name="filters"></param>
        /// <param name="sort"></param>
        /// <returns></returns>
        public ISearchResult Search(string text, FilterParameter[] filters, SearchOptions options, Sort sort)
        {
            Query  query;
            Filter filter;

            global::Lucene.Net.Search.SortField[] sortFields;
            text = RemoveAcent(text);
            PrepareSearch(text, filters, options, out query, out filter, out sortFields);
            global::Lucene.Net.Search.Sort luceneSort = Convert(sort, sortFields);
            return(new SearchResult(query, filter, CreateReader, luceneSort, options, _dataRepository, _structRepository, (sender, e) => {
                IncrementCountWords(text, filters);
            }));
        }