Example #1
0
        public ScoredResult Search(QueryContext query, int page = 0, int size = 10000)
        {
            if (query == null)
            {
                return(new ScoredResult {
                    Docs = new List <ScoredDocument>()
                });
            }

            var searchTime = Stopwatch.StartNew();
            var skip       = page * size;
            var scores     = Collect(query);
            var paged      = scores.OrderByDescending(s => s.Score).Skip(skip).Take(size).ToArray();

            var docTime     = Stopwatch.StartNew();
            var docs        = new List <ScoredDocument>(size);
            var groupedByIx = paged.GroupBy(s => s.Ix);

            foreach (var group in groupedByIx)
            {
                GetDocs(group.ToList(), group.Key.VersionId, docs);
            }

            Log.DebugFormat("fetched {0} docs for query {1} in {2}", docs.Count, query, docTime.Elapsed);

            var result = new ScoredResult
            {
                Total = scores.Length,
                Docs  = docs.OrderByDescending(d => d.Score).ToList()
            };

            Log.DebugFormat("searched {0} in {1}", query, searchTime.Elapsed);

            return(result);
        }
Example #2
0
        public ScoredResult Search(IList <QueryContext> query, int page = 0, int size = 10)
        {
            if (query == null)
            {
                return(new ScoredResult {
                    Docs = new List <ScoredDocument>()
                });
            }

            var searchTime = Stopwatch.StartNew();
            var scores     = Collect(query);
            var docTime    = Stopwatch.StartNew();
            int total;
            var docs = GetDocs(scores, page * size, size, out total);

            Log.InfoFormat("fetched {0} docs for query {1} in {2}", docs.Count, query.ToQueryString(), docTime.Elapsed);

            var result = new ScoredResult
            {
                Total = total,
                Docs  = docs
            };

            Log.DebugFormat("total search time for query {0} in {1}", query.ToQueryString(), searchTime.Elapsed);

            return(result);
        }