Beispiel #1
0
        private static LuceneParams GetLuceneSearchParams(SearchArguments arguments)
        {
            var result = new LuceneParams();

            //Set Defaults
            if (arguments.Query == null)
            {
                arguments.Query = new MatchAllDocsQuery();
            }

            //Special Behavior for OData Queries since OData queries potentially specify the query/filter/skip/take all in one.
            var query = arguments.Query as ODataQuery;

            if (query != null)
            {
                var oDataQuery  = query;
                var parser      = new ODataQueryParser();
                var modelFilter = parser.ParseQuery(oDataQuery.DefaultField, oDataQuery.Query);

                result.Query = modelFilter.Query.IsNullOrWhiteSpace()
                           ? new Lucene.Net.Search.MatchAllDocsQuery()
                           : LuceneModelFilter.ParseQuery(oDataQuery.DefaultField, modelFilter.Query);

                result.Filter = modelFilter.Filter.IsNullOrWhiteSpace()
                            ? null
                            : LuceneModelFilter.ParseFilter(oDataQuery.DefaultField, modelFilter.Filter);

                result.Sort = modelFilter.Sort ?? new Lucene.Net.Search.Sort();

                if (modelFilter.Take > 0)
                {
                    result.MaxResults = modelFilter.Take;
                }

                if (modelFilter.Skip > 0)
                {
                    result.Skip = modelFilter.Skip;
                }
            }
            else
            {
                result.Query  = Barista.Search.Query.ConvertQueryToLuceneQuery(arguments.Query);
                result.Filter = null;
                result.Sort   = Barista.Search.Sort.ConvertSortToLuceneSort(arguments.Sort);

                if (arguments.Filter != null)
                {
                    result.Filter = Barista.Search.Filter.ConvertFilterToLuceneFilter(arguments.Filter);
                }

                if (arguments.Skip.HasValue)
                {
                    result.Skip = arguments.Skip.Value;
                }

                result.MaxResults = arguments.Take ?? 1000;
            }

            return(result);
        }