示例#1
0
        private static int SmartSearch(SmartSearchOptions options)
        {
            InitSearch(options);
            SearchConfiguration config = LoadConfiguration();

            string  path    = Directory.GetCurrentDirectory();
            Project project = config.Projects.FirstOrDefault(
                p => path.StartsWith(p.Path, StringComparison.InvariantCultureIgnoreCase));

            if (project == null)
            {
                throw new ArgumentException($"Current path is not under any known project. Please edit '{ConfigFilePath}'.");
            }


            FileFilter fileFilter = config.FileFilters.FirstOrDefault(filter =>
                                                                      filter.Name.Equals(options.FileFilterName, StringComparison.InvariantCultureIgnoreCase));

            if (fileFilter == null)
            {
                throw new ArgumentException($"File filter named '{options.FileFilterName}' does not exist. Please edit '{ConfigFilePath}'.");
            }

            var fileSelector = ExtensibleFileSelectorBuilder.NewFileSelector()
                               .WithExcludedExtensions(config.ExcludedExtensions)
                               .WithExcludedPaths(config.ExcludedPaths)
                               .WithRegexFilter(fileFilter.Regex)
                               .WithExclusionRegex(fileFilter.Exclusion)
                               .WithMaxSize(config.MaxFileSize)
                               .Build();

            SmartContentSelector contentSelector = new SmartContentSelector(options.Query, options.CaseSensitive);

            string indexDirectory = _configPathResolver.GetIndexDir(project.Name, fileFilter.Index);
            var    luceneSearcher = new LuceneSearcher(indexDirectory)
            {
                MaxSearchResults = Int32.MaxValue
            };

            foreach (var result in luceneSearcher.SearchContentInFolder(path, fileSelector, contentSelector))
            {
                _console.PrintSearchResult(result);
            }

            return(0);
        }