Exemplo n.º 1
0
        // <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);
            }
        }