Beispiel #1
0
        public XDoc GetAggregateQueryXml(string queryString, DateTime since, DateTime before)
        {
            ThrowOnInvalidLicense();
            var query       = BuildQuery(queryString, null, SearchQueryParserType.BestGuess, true);
            var sortedTerms = query.GetOrderedNormalizedTermString();
            var queries     = _session.SearchAnalytics_GetTrackedQueries(sortedTerms ?? "", SearchAnalyticsQueryType.QueryString, since, before, null, null);

            if (!queries.Any())
            {
                return(XDoc.Empty);
            }
            var last     = queries.Max(x => x.Created);
            var queryDoc = new XDoc("query")
                           .Attr("href", BuildLogHref(sortedTerms, since, before))
                           .Elem("sorted-terms", sortedTerms)
                           .Elem("date.searched", last)
                           .Start("queries")
                           .Attr("totalcount", queries.Count());
            var agg = (from q in queries
                       group q by q.RawQuery into raw
                       let count = raw.Count()
                                   orderby count descending
                                   select new { Raw = raw.Key, Count = count });

            foreach (var raw in agg)
            {
                queryDoc.Start("raw")
                .Attr("count", raw.Count)
                .Value(raw.Raw)
                .End();
            }
            queryDoc.End();
            var relatedIds = (from q in queries where q.PreviousId.HasValue select q.PreviousId.Value).ToArray();
            var previous   = _session.SearchAnalytics_GetPreviousSortedQueryTermsRecursively(relatedIds);

            if (previous.Any())
            {
                queryDoc.Start("previous")
                .Attr("totalcount", previous.Count());
                var previousAgg = (from p in previous
                                   group p by p into related
                                   let count = related.Count()
                                               orderby count descending
                                               select new { SortedTerms = related.Key, Count = count });
                foreach (var related in previousAgg)
                {
                    queryDoc.Start("query")
                    .Attr("count", related.Count)
                    .Attr("href", BuildLogHref(related.SortedTerms, since, before))
                    .Elem("sorted-terms", related.SortedTerms)
                    .End();
                }
                queryDoc.End();
            }
            GetSelectedResultXml(queryDoc, queries, null);
            return(queryDoc);
        }