Exemplo n.º 1
0
        public static IList <T> Search <T>(string keywords, ContentReference root, int pageNumber, int pageSize, Collection <SortField> sortFields, out int totalItems) where T : IContent
        {
            var groupQuery = new GroupQuery(LuceneOperator.AND);

            groupQuery.QueryExpressions.Add(new ContentQuery <T>());

            if (string.IsNullOrWhiteSpace(keywords))
            {
                var dateRangeQuery = new CreatedDateRangeQuery(DateTime.MinValue, DateTime.MaxValue, true);
                groupQuery.QueryExpressions.Add(dateRangeQuery);
            }
            else
            {
                var keywordGroupQuery = new GroupQuery(LuceneOperator.OR);
                keywordGroupQuery.QueryExpressions.Add(AddQueryExpression(keywords, Field.Title));
                keywordGroupQuery.QueryExpressions.Add(AddQueryExpression(keywords, Field.DisplayText));
                keywordGroupQuery.QueryExpressions.Add(AddQueryExpression(keywords, Field.Default));
                groupQuery.QueryExpressions.Add(keywordGroupQuery);
            }

            var searchHandler = ServiceLocator.Current.GetInstance <LuceneContentSearchHandler>();

            // Get search results
            var results = searchHandler.GetSearchResults <T>(groupQuery, root, pageNumber, pageSize, sortFields, true);

            totalItems = results.TotalHits;

            // Convert search results to pages
            var indexResponseItems = results.IndexResponseItems;

            return(indexResponseItems.Select(v => searchHandler.GetContent <T>(v)).Where(v => v != null).ToList());
        }
Exemplo n.º 2
0
        public static IList <T> SearchByCreatedDateRange <T>(DateTime startDate, DateTime endDate, bool inclusive, ContentReference root, int pageNumber, int pageSize, Collection <SortField> sortFields, out int totalItems) where T : IContent
        {
            var groupQuery = new GroupQuery(LuceneOperator.AND);

            var dateRangeQuery = new CreatedDateRangeQuery(startDate, endDate, inclusive);

            groupQuery.QueryExpressions.Add(dateRangeQuery);

            var searchHandler = ServiceLocator.Current.GetInstance <LuceneContentSearchHandler>();

            var results = searchHandler.GetSearchResults <T>(groupQuery, root, pageNumber, pageSize, sortFields, true);

            totalItems = results.TotalHits;

            return(results.IndexResponseItems.Select(v => searchHandler.GetContent <T>(v)).ToList());
        }
Exemplo n.º 3
0
        public static Dictionary <string, string> GetTags <T>(ContentReference root, bool includeOlder) where T : IContent
        {
            var dictionary = new Dictionary <string, string>();
            var groupQuery = new GroupQuery(LuceneOperator.AND);

            groupQuery.QueryExpressions.Add(new ContentQuery <T>());
            if (includeOlder)
            {
                var dateRangeQuery = new CreatedDateRangeQuery(DateTime.MinValue, DateTime.MaxValue, true);
                groupQuery.QueryExpressions.Add(dateRangeQuery);
            }
            else
            {
                groupQuery.QueryExpressions.Add(new UpcomingEventQuery(true));
            }

            var searchHandler = ServiceLocator.Current.GetInstance <LuceneContentSearchHandler>();

            var eventTagField = new EventTagField();
            var sortFields    = new Collection <SortField>();

            sortFields.Add(new SortField(eventTagField.Name, SortField.STRING));
            // Get search results
            var results = searchHandler.GetSearchResults <T>(groupQuery, root, 1, int.MaxValue, sortFields, true);

            foreach (var item in results.IndexResponseItems)
            {
                if (!string.IsNullOrWhiteSpace(item.DisplayText))
                {
                    var displayText = item.DisplayText.Trim();

                    var tags = displayText.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var tag in tags)
                    {
                        var key = tag.ToLowerInvariant();
                        if (!dictionary.ContainsKey(key))
                        {
                            dictionary.Add(key, tag);
                        }
                    }
                }
            }

            return(dictionary);
        }
Exemplo n.º 4
0
        public static int Count <T>(string keywords, ContentReference root) where T : IContent
        {
            var groupQuery = new GroupQuery(LuceneOperator.AND);

            groupQuery.QueryExpressions.Add(new ContentQuery <T>());

            if (string.IsNullOrWhiteSpace(keywords))
            {
                var dateRangeQuery = new CreatedDateRangeQuery(DateTime.MinValue, DateTime.MaxValue, true);
                groupQuery.QueryExpressions.Add(dateRangeQuery);
            }
            else
            {
                var keywordGroupQuery = new GroupQuery(LuceneOperator.OR);
                keywordGroupQuery.QueryExpressions.Add(AddQueryExpression(keywords, Field.Title));
                keywordGroupQuery.QueryExpressions.Add(AddQueryExpression(keywords, Field.DisplayText));
                groupQuery.QueryExpressions.Add(keywordGroupQuery);
            }

            var searchHandler = ServiceLocator.Current.GetInstance <LuceneContentSearchHandler>();

            return(searchHandler.GetSearchResults <T>(groupQuery, root, 1, int.MaxValue, null, true).TotalHits);
        }