// <summary> /// Searches using a (command line) user interface arguments /// </summary> public static void Search(Index indexObject, IEnumerable<string> args, SearchFilter handler) { string index = null; string queries = null; string result = null; string names = null; bool help = false; bool disthist = true; bool force = false; int showmaxres = 30; string indexclass = null; var config = new Dictionary<string, object> (); OptionSet ops = new OptionSet () { { "i|index=", v => index = v }, { "q|queries=", v => queries = v }, { "r|result=", v => result = v }, { "force|f", v => force = true}, { "hidehist", v => disthist = false }, { "names=", v => names = v}, { "showmaxres=", v => showmaxres = int.Parse (v) }, { "indexclass=", v => indexclass = v}, { "h|?|help", v => help = true }, { "config=", delegate(string v) { var split = v.Split (':'); if (split.Length != 2) { throw new ArgumentNullException ("config command options should be in format --config key:value "); } config.Add (split [0], split [1]); } } }; List<string> extraArgs = ops.Parse (args); if (help) { Console.WriteLine ("Usage: "); Console.WriteLine ("{0} search --index indexname --queries queriesfile [--result resname] [index args] [environ args]", Environment.GetCommandLineArgs () [0]); return; } if (result == null) { force = true; } if ((indexObject == null && index == null) || queries == null) { Console.WriteLine ("Usage: "); Console.WriteLine ("{0} search --index indexname --queries queriesfile [--result resname] [index args] [environ args]", Environment.GetCommandLineArgs () [0]); throw new ArgumentException (String.Format ("Some required arguments wasn't specified index: {0}, queries: {0}", index, queries)); } if (force || !File.Exists (result)) { Console.WriteLine ("XXXXXXXXXX index: {0}, indexclass: {1}", index, indexclass); if (indexObject == null) { indexObject = IndexLoader.Load (index, indexclass, config); } else { index = String.Format ("<memory:{0}>", indexObject.ToString ()); } indexObject.Configure (extraArgs); var searchOps = new ShellSearchOptions (queries, index, names, result, showmaxres, disthist, handler); var qstream = new QueryStream (queries); Search (indexObject, qstream.Iterate (), searchOps, extraArgs); } else { Console.WriteLine ("skipping search command since result file already exists. File: {0}", result); } }