private static int DoSearch(SearchOptions opts) { var timer = Stopwatch.StartNew(); var documentsCount = 0; var matchesCount = 0; using (var index = IndexFactory.OpenIndex(new PersistentIndexName("."))) { var searchQuery = index.Compile(opts.Query); var prevDoc = Occurrence.NoId; var doc = default(TextDocument); var hits = new SortedSet <int>(); foreach (var match in searchQuery.AsEnumerable()) { if (match.DocumentId != prevDoc) { if (prevDoc != Occurrence.NoId) { PrintConsole(ConsoleColor.Gray, String.Empty); PrintConsole(ConsoleColor.Gray, "===================="); doc = new TextDocument(index.GetText(prevDoc, 1UL).ReadToEnd(), index.GetPositions(prevDoc, 1UL)); PrintConsole(ConsoleColor.Green, doc.Annotate(hits)); PrintConsole(ConsoleColor.Gray, "===================="); PrintConsole(ConsoleColor.Gray, String.Empty); hits.Clear(); } PrintConsole(ConsoleColor.Gray, index.Fields.GetMetadata(match.DocumentId)); prevDoc = match.DocumentId; documentsCount++; } ++matchesCount; foreach (var o in match.GetOccurrences()) { hits.Add((int)o.TokenId); } PrintConsole(ConsoleColor.Gray, $"{match} "); } if (prevDoc != Occurrence.NoId) { PrintConsole(ConsoleColor.Gray, String.Empty); PrintConsole(ConsoleColor.Gray, "===================="); doc = new TextDocument(index.GetText(prevDoc, 1UL).ReadToEnd(), index.GetPositions(prevDoc, 1UL)); PrintConsole(ConsoleColor.Green, doc.Annotate(hits)); PrintConsole(ConsoleColor.Gray, "===================="); PrintConsole(ConsoleColor.Gray, String.Empty); hits.Clear(); } } PrintConsole(ConsoleColor.White, $"Documents found: {documentsCount}, matches: {matchesCount}, time: {timer.Elapsed}"); return(0); }