From b24f573eb9553144f740b2cadb50644d402a6be1 Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Sat, 22 Sep 2018 12:11:47 +0100 Subject: [PATCH] Finish up basic CLI. Next up: testing! --- SearchBox-CLI/Program.cs | 26 ++++++++++++++++++++------ SearchBox/SearchBox.cs | 1 + SearchBox/SearchResult.cs | 10 +++++++++- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/SearchBox-CLI/Program.cs b/SearchBox-CLI/Program.cs index 3778707..7e7bcb0 100644 --- a/SearchBox-CLI/Program.cs +++ b/SearchBox-CLI/Program.cs @@ -28,6 +28,8 @@ namespace SearchBoxCLI } class MainClass { + private static List Extras = new List(); + private static OperatingModes Mode = OperatingModes.Query; private static bool Batch = false; private static string Name = string.Empty; @@ -39,11 +41,10 @@ namespace SearchBoxCLI public static int Main(string[] args) { - List extras = new List(); for (int i = 0; i < args.Length; i++) { if (!args[i].StartsWith("-")) { - extras.Add(args[i]); + Extras.Add(args[i]); continue; } @@ -89,8 +90,8 @@ namespace SearchBoxCLI return 1; } } - if (extras.Count < 1) return HandleHelp(); - string modeText = extras.First(); extras.RemoveAt(0); + if (Extras.Count < 1) return HandleHelp(); + string modeText = Extras.First(); Extras.RemoveAt(0); Mode = (OperatingModes)Enum.Parse(typeof(OperatingModes), modeText, true); switch (Mode) { @@ -111,6 +112,7 @@ namespace SearchBoxCLI Console.WriteLine(); Console.WriteLine("Usage:"); Console.WriteLine(" ./SearchBox.exe {mode} [options]"); + Console.WriteLine(" ./SearchBox.exe query \"{query string}\" [options]"); Console.WriteLine(); Console.WriteLine("Modes:"); Console.WriteLine(" query Query a pre-existing inverted search index"); @@ -213,13 +215,25 @@ namespace SearchBoxCLI private static int HandleQuery() { + if (Extras.Count < 1) { + Console.Error.WriteLine("Error: No query specified!"); + return 1; + } + + SearchBox searchBox = JsonConvert.DeserializeObject( + File.ReadAllText(SearchIndexFilepath) + ); + + List results = searchBox.Query(Extras[0], new QuerySettings()); + switch (OutputMode) { case OutputModes.Json: - + Console.WriteLine(JsonConvert.SerializeObject(results)); break; case OutputModes.Text: - + foreach (SearchResult nextResult in results) + Console.WriteLine(nextResult); break; } return 0; diff --git a/SearchBox/SearchBox.cs b/SearchBox/SearchBox.cs index 624a01a..cb13341 100644 --- a/SearchBox/SearchBox.cs +++ b/SearchBox/SearchBox.cs @@ -114,6 +114,7 @@ namespace LibSearchBox List offsets = new List(); foreach (Tuple token in tokenizer.IterateTokens()) offsets.AddRange(index.Query(token.Item2)[pageDef.Key].Select((int offset) => new SearchOffset(token.Item2, offset))); + offsets.Sort((SearchOffset x, SearchOffset y) => x.Offset - y.Offset); resultsRaw.Add(new SearchResult( idMap.GetPageName(pageDef.Key), diff --git a/SearchBox/SearchResult.cs b/SearchBox/SearchResult.cs index 7655339..53ba9d2 100644 --- a/SearchBox/SearchResult.cs +++ b/SearchBox/SearchResult.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Text; +using System.Linq; namespace LibSearchBox { @@ -30,6 +32,12 @@ namespace LibSearchBox Offsets = inOffsets; } - + public override string ToString() + { + StringBuilder result = new StringBuilder(); + result.AppendLine($"{Rank.ToString().PadLeft(5)}: {PageName}"); + result.Append($" {string.Join(", ", Offsets.Select((SearchOffset nextOffset) => $"{nextOffset.Term} @ {nextOffset.Offset}"))}"); + return base.ToString(); + } } }