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); }
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); }