private IEnumerable <ContentSearchResult> EnumSearchResults(int start, Searcher searcher, TopDocsCollector collector, int limit) { TopDocs results = collector.TopDocs(); float max = results.GetMaxScore(); ScoreDoc[] found = results.scoreDocs; limit = Math.Min(limit, found.Length); for (int i = start; i < limit; i++) { ScoreDoc doc = found[i]; Document docInfo = searcher.Doc(doc.doc); ContentSearchResult.Builder builder = new ContentSearchResult.Builder(); builder.SetRanking((uint)Math.Max(0, Math.Min(100, (int)(doc.score / max * 100f)))); builder.SetUri(docInfo.GetField("uri").StringValue()); builder.SetTitle(docInfo.GetField("title").StringValue()); builder.SetBlurb(docInfo.GetField("blurb").StringValue()); builder.SetModified(DateTime.ParseExact(docInfo.GetField("modified").StringValue(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None)); ContentRecord record; if (TryGetValue(builder.Uri, out record)) { builder.SetRecord(record); } yield return(builder.Build()); } }
private IEnumerable<ContentSearchResult> EnumSearchResults(int start, Searcher searcher, TopDocsCollector collector, int limit) { TopDocs results = collector.TopDocs(); float max = results.GetMaxScore(); ScoreDoc[] found = results.scoreDocs; limit = Math.Min(limit, found.Length); for (int i = start; i < limit; i++) { ScoreDoc doc = found[i]; Document docInfo = searcher.Doc(doc.doc); ContentSearchResult.Builder builder = new ContentSearchResult.Builder(); builder.SetRanking((uint) Math.Max(0, Math.Min(100, (int) (doc.score/max*100f)))); builder.SetUri(docInfo.GetField("uri").StringValue()); builder.SetTitle(docInfo.GetField("title").StringValue()); builder.SetBlurb(docInfo.GetField("blurb").StringValue()); builder.SetModified(DateTime.ParseExact(docInfo.GetField("modified").StringValue(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None)); ContentRecord record; if (TryGetValue(builder.Uri, out record)) { builder.SetRecord(record); } yield return builder.Build(); } }