Exemple #1
0
        /// <summary>
        /// Sets the sort to the terms in each field in succession.
        /// </summary>
        /// <param name="fieldNames">The fieldnames.</param>
        public virtual void SetSort(string[] fieldNames)
        {
            int n = fieldNames.Length;

            SearchSortField[] nfields = new SearchSortField[n];
            for (int i = 0; i < n; ++i)
            {
                nfields[i] = new SearchSortField(fieldNames[i]);
            }

            _Fields = nfields;
        }
Exemple #2
0
        /// <summary>
        /// Sets the sort to the terms in each field in succession.
        /// </summary>
        /// <param name="fieldNames">The fieldnames.</param>
        public virtual void SetSort(string[] fieldNames)
        {
            int n = fieldNames.Length;

            SearchSortField[] nfields = new SearchSortField[n];
            for (int i = 0; i < n; ++i)
            {
                nfields[i] = new SearchSortField(fieldNames[i]);
            }

            _Fields = nfields;
        }
        public dynamic Search(
            string query = "",
            bool includePrerelease = false,
            bool latestOnly = true,
            int offset = 0,
            int count = 20,
            PackageOriginFilter originFilter = PackageOriginFilter.Any,
            SearchSortField sort = SearchSortField.Score,
            SearchSortDirection order = SearchSortDirection.Ascending)
        {
            var criteria = new SearchCriteria(query)
            {
                AllowPrereleaseVersions = includePrerelease,
                PackageOriginFilter = originFilter,
                SortField = sort,
                SortDirection = order
            };

            LuceneQueryStatistics stats = null;
            List<IPackage> hits;

            try
            {
                var queryable = LuceneRepository.Search(criteria).CaptureStatistics(s => stats = s);

                if (latestOnly)
                {
                    queryable = queryable.LatestOnly(includePrerelease);
                }

                hits = queryable.Skip(offset).Take(count).ToList();
            }
            catch (InvalidSearchCriteriaException ex)
            {
                var message = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, message);
            }

            dynamic result = new ExpandoObject();

            // criteria
            result.Query = query;
            result.IncludePrerelease = includePrerelease;
            result.TotalHits = stats.TotalHits;
            result.OriginFilter = originFilter;
            result.Sort = sort;
            result.Order = order;

            // statistics
            result.Offset = stats.SkippedHits;
            result.Count = stats.RetrievedDocuments;
            result.ElapsedPreparationTime = stats.ElapsedPreparationTime;
            result.ElapsedSearchTime = stats.ElapsedSearchTime;
            result.ElapsedRetrievalTime = stats.ElapsedRetrievalTime;

            var chars = stats.Query.ToString().Normalize(NormalizationForm.FormD);
            result.ComputedQuery = new string(chars.Where(c => c < 0x7f && !char.IsControl(c)).ToArray());

            // hits
            result.Hits = hits;
            return result;
        }
        public dynamic Search(string query = "", bool includePrerelease = false, int offset = 0, int count = 20, PackageOriginFilter originFilter = PackageOriginFilter.Any, SearchSortField sort = SearchSortField.Score, SearchSortDirection order = SearchSortDirection.Ascending)
        {
            var criteria = new SearchCriteria(query)
            {
                AllowPrereleaseVersions = includePrerelease,
                PackageOriginFilter = originFilter,
                SortField = sort,
                SortDirection = order
            };

            var queryable = LuceneRepository.Search(criteria).LatestOnly(includePrerelease);

            var totalHits = queryable.Count();
            var hits = queryable.Skip(offset).Take(count).ToList();

            dynamic result = new ExpandoObject();
            result.Query = query;
            result.IncludePrerelease = includePrerelease;
            result.TotalHits = totalHits;
            result.Hits = hits;
            result.Offset = offset;
            result.OriginFilter = originFilter;
            result.Sort = sort;
            result.Order = order;
            return result;
        }
        public dynamic Search(
            string query           = "",
            bool includePrerelease = false,
            bool latestOnly        = true,
            int offset             = 0,
            int count = 20,
            PackageOriginFilter originFilter = PackageOriginFilter.Any,
            SearchSortField sort             = SearchSortField.Score,
            SearchSortDirection order        = SearchSortDirection.Ascending)
        {
            var criteria = new SearchCriteria(query)
            {
                AllowPrereleaseVersions = includePrerelease,
                PackageOriginFilter     = originFilter,
                SortField     = sort,
                SortDirection = order
            };

            LuceneQueryStatistics stats = null;
            List <IPackage>       hits;

            try
            {
                var queryable = LuceneRepository.Search(criteria).CaptureStatistics(s => stats = s);

                if (latestOnly)
                {
                    queryable = queryable.LatestOnly(includePrerelease);
                }

                hits = queryable.Skip(offset).Take(count).ToList();
            }
            catch (InvalidSearchCriteriaException ex)
            {
                var message = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message));
            }

            dynamic result = new ExpandoObject();

            // criteria
            result.Query             = query;
            result.IncludePrerelease = includePrerelease;
            result.TotalHits         = stats.TotalHits;
            result.OriginFilter      = originFilter;
            result.Sort  = sort;
            result.Order = order;

            // statistics
            result.Offset = stats.SkippedHits;
            result.Count  = stats.RetrievedDocuments;
            result.ElapsedPreparationTime = stats.ElapsedPreparationTime;
            result.ElapsedSearchTime      = stats.ElapsedSearchTime;
            result.ElapsedRetrievalTime   = stats.ElapsedRetrievalTime;

            var chars = stats.Query.ToString().Normalize(NormalizationForm.FormD);

            result.ComputedQuery = new string(chars.Where(c => c < 0x7f && !char.IsControl(c)).ToArray());

            // hits
            result.Hits = hits;
            return(result);
        }
Exemple #6
0
 /// <summary>
 /// Sets the sort to the given criteria.
 /// </summary>
 /// <param name="field">The field.</param>
 public virtual void SetSort(SearchSortField field)
 {
     this._Fields = new SearchSortField[] { field };
 }
Exemple #7
0
 /// <summary>
 /// Sets the sort.
 /// </summary>
 /// <param name="field">The field.</param>
 /// <param name="isDescending">if set to <c>true</c> [is descending].</param>
 public virtual void SetSort(string field, bool isDescending)
 {
     SearchSortField[] nfields = new SearchSortField[] { new SearchSortField(field, isDescending) };
     _Fields = nfields;
 }
Exemple #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SearchSort"/> class.
 /// </summary>
 /// <param name="fields">The fields.</param>
 public SearchSort(SearchSortField[] fields)
 {
     SetSort(fields);
 }
Exemple #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SearchSort"/> class.
 /// </summary>
 /// <param name="field">The field.</param>
 public SearchSort(SearchSortField field)
 {
     SetSort(field);
 }
Exemple #10
0
 /// <summary>
 /// Sets the sort.
 /// </summary>
 /// <param name="fields">The fields.</param>
 public virtual void SetSort(SearchSortField[] fields)
 {
     _Fields = fields;
 }
Exemple #11
0
 /// <summary>
 /// Sets the sort to the given criteria.
 /// </summary>
 /// <param name="field">The field.</param>
 public virtual void SetSort(SearchSortField field)
 {
     this._Fields = new SearchSortField[] { field };
 }
Exemple #12
0
 /// <summary>
 /// Sets the sort.
 /// </summary>
 /// <param name="field">The field.</param>
 /// <param name="isDescending">if set to <c>true</c> [is descending].</param>
 public virtual void SetSort(string field, bool isDescending)
 {
     SearchSortField[] nfields = new SearchSortField[] { new SearchSortField(field, isDescending) };
     _Fields = nfields;
 }
Exemple #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SearchSort"/> class.
 /// </summary>
 /// <param name="field">The field.</param>
 public SearchSort(SearchSortField field)
 {
     SetSort(field);
 }
        public dynamic Search(string query = "", bool includePrerelease = false, int offset = 0, int count = 20, PackageOriginFilter originFilter = PackageOriginFilter.Any, SearchSortField sort = SearchSortField.Score, SearchSortDirection order = SearchSortDirection.Ascending)
        {
            var criteria = new SearchCriteria(query)
            {
                AllowPrereleaseVersions = includePrerelease,
                PackageOriginFilter = originFilter,
                SortField = sort,
                SortDirection = order
            };

            LuceneQueryStatistics stats = null;
            var queryable = LuceneRepository.Search(criteria).CaptureStatistics(s => stats = s).LatestOnly(includePrerelease);

            var hits = queryable.Skip(offset).Take(count).ToList();

            dynamic result = new ExpandoObject();

            // criteria
            result.Query = query;
            result.IncludePrerelease = includePrerelease;
            result.TotalHits = stats.TotalHits;
            result.OriginFilter = originFilter;
            result.Sort = sort;
            result.Order = order;

            // statistics
            result.Offset = stats.SkippedHits;
            result.Count = stats.RetrievedDocuments;
            result.ElapsedPreparationTime = stats.ElapsedPreparationTime;
            result.ElapsedSearchTime = stats.ElapsedSearchTime;
            result.ElapsedRetrievalTime = stats.ElapsedRetrievalTime;
            result.ComputedQuery = stats.Query.ToString().Replace("`\b\u0000\u0000\u0000\u0001", "true").Replace("`\b\u0000\u0000\u0000\u0000", "false");

            // hits
            result.Hits = hits;
            return result;
        }