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); }
public static IFullTextIndex AddToIndex(IIndexName indexName, string text) { using (var builder = IndexFactory.CreateBuilder(indexName)) { builder.Start(); builder.AddText(text, null); builder.StopAndWait(); } return(IndexFactory.OpenIndex(indexName)); }
private static int DoPrint(PrintOptions opts) { var timer = Stopwatch.StartNew(); using (var index = IndexFactory.OpenIndex(new PersistentIndexName("."))) { var visitor = new PrintVisitor(index); index.Visit(visitor); PrintConsole(ConsoleColor.White, $"Terms: {visitor.Terms}, time: {timer.Elapsed}"); } return(0); }
public static IFullTextIndex PrepareIndexForSearch(IIndexName indexName) { using (var builder = IndexFactory.CreateBuilder(indexName)) { builder.Start(); builder.AddText("Hello World!", null); builder.AddText("Petro Petrolium Petrol", null); builder.AddText("This is test document for search unit tests", null); builder.AddText("This test document is used for search operators", null); builder.AddText("This full-text search only supports boolean operators: and, or", null); builder.AddText("Programming is very exciting. Programs can help. This is fantastic!!!", null); builder.StopAndWait(); } return(IndexFactory.OpenIndex(indexName)); }
private static void LoadAnIndex(string indexLocaion, Fallen8 fallen8, IndexFactory indexFactory) { //if there is no savepoint file... do nothing if (!File.Exists(indexLocaion)) { return; } using (var file = File.Open(indexLocaion, FileMode.Open, FileAccess.Read)) { var reader = new SerializationReader(file); var indexName = reader.ReadString(); var indexPluginName = reader.ReadString(); indexFactory.OpenIndex(indexName, indexPluginName, reader, fallen8); } }
private static int DoLookup(LookupOptions opts) { var pattern = opts.Pattern; var timer = Stopwatch.StartNew(); var termsFound = 0; using (var index = IndexFactory.OpenIndex(new PersistentIndexName("."))) { var matcher = index.CompilePattern(pattern); var terms = index.GetTerms(matcher); foreach (var term in terms) { ++termsFound; PrintConsole(ConsoleColor.Gray, term.Key); } } PrintConsole(ConsoleColor.White, $"Terms found: {termsFound}, time: {timer.Elapsed}"); return(0); }
static void Main(string[] args) { PrintConsole(ConsoleColor.Green, "PMS Full-Text Search (c) Petro Protsyk 2017-2018"); if (args.Length < 1) { PrintHelp(); return; } if (args[0] == "index") { var fieldsType = (args.Length > 3 && args[2] == "--fieldsType") ? args[3] : "List"; using (var builder = IndexFactory.CreateBuilder(new PersistentIndexName(".", fieldsType))) { builder.Start(); var timer = Stopwatch.StartNew(); var documents = 0; foreach (var file in Directory.EnumerateFiles(args[1], "*.txt", SearchOption.AllDirectories).Select(f => new FileInfo(f))) { PrintConsole(ConsoleColor.Gray, $"{file.FullName}"); builder.AddFile( file.FullName, "{filename:\"" + file.FullName + "\", size:\"" + file.Length + "\", created:\"" + file.CreationTime.ToString("o") + "\"}"); ++documents; } builder.StopAndWait(); PrintConsole(ConsoleColor.White, $"Indexed documents: {documents}, time: {timer.Elapsed}"); } } else if (args[0] == "search") { var timer = Stopwatch.StartNew(); var documentsCount = 0; var matchesCount = 0; using (var index = IndexFactory.OpenIndex(new PersistentIndexName("."))) { using (var compiler = new FullTextQueryCompiler(index)) { var searchQuery = compiler.Compile(args[1]); var prevDoc = Occurrence.NoId; foreach (var match in searchQuery.AsEnumerable()) { if (match.DocumentId != prevDoc) { if (prevDoc != Occurrence.NoId) { PrintConsole(ConsoleColor.Gray, String.Empty); } PrintConsole(ConsoleColor.Gray, index.Fields.GetMetadata(match.DocumentId)); prevDoc = match.DocumentId; documentsCount++; } ++matchesCount; PrintConsole(ConsoleColor.Gray, $"{match} "); } if (prevDoc != Occurrence.NoId) { PrintConsole(ConsoleColor.Gray, String.Empty); } } } PrintConsole(ConsoleColor.White, $"Documents found: {documentsCount}, matches: {matchesCount}, time: {timer.Elapsed}"); } else if (args[0] == "print") { var timer = Stopwatch.StartNew(); var terms = 0; using (var index = IndexFactory.OpenIndex(new PersistentIndexName("."))) { index.Visit(new PrintVisitor(index)); ++terms; } PrintConsole(ConsoleColor.White, $"Terms: {terms}, time: {timer.Elapsed}"); } else if (args[0] == "lookup") { var timer = Stopwatch.StartNew(); var termsFound = 0; using (var index = IndexFactory.OpenIndex(new PersistentIndexName("."))) { int tilda = args[1].IndexOf("~"); IEnumerable <DictionaryTerm> terms = null; if (tilda == -1) { terms = index.GetTerms(args[1]); } else { terms = index.GetTerms(args[1].Substring(0, tilda), int.Parse(args[1].Substring(tilda + 1))); } foreach (var term in terms) { ++termsFound; PrintConsole(ConsoleColor.Gray, term.Key); } } PrintConsole(ConsoleColor.White, $"Terms found: {termsFound}, time: {timer.Elapsed}"); } }