Exemplo n.º 1
0
        public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery,
                                              IDictionary <string, IFilter> enabledFilters)
        {
            System.Type type = GetCriteriaClass(criteria);
            ISearchFactoryImplementor searchFactory = ContextHelper.GetSearchFactory(GetSession(criteria));

            Iesi.Collections.Generic.ISet <System.Type> types;
            IndexSearcher searcher = FullTextSearchHelper.BuildSearcher(searchFactory, out types, type);

            if (searcher == null)
            {
                throw new SearchException("Could not find a searcher for class: " + type.FullName);
            }
            Lucene.Net.Search.Query query = FullTextSearchHelper.FilterQueryByClasses(types, luceneQuery);
            Hits          hits            = searcher.Search(query);
            List <object> ids             = new List <object>();

            for (int i = 0; i < hits.Length(); i++)
            {
                object id = DocumentBuilder.GetDocumentId(searchFactory, type, hits.Doc(i));
                ids.Add(id);
            }
            base.Values = ids.ToArray();
            return(base.ToSqlString(criteria, criteriaQuery, enabledFilters));
        }
        public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
        {
            var type          = GetCriteriaClass(criteria);
            var searchFactory = ContextHelper.GetSearchFactory(GetSession(criteria));
            var searcher      = FullTextSearchHelper.BuildSearcher(searchFactory, out var types, type);

            if (searcher == null)
            {
                throw new SearchException("Could not find a searcher for class: " + type.FullName);
            }
            var query   = FullTextSearchHelper.FilterQueryByClasses(types, luceneQuery);
            var results = searcher.Search(query, Int32.MaxValue);

            Values = results.ScoreDocs.Select(result => searcher.Doc(result.Doc))
                     .Select(doc => DocumentBuilder.GetDocumentId(searchFactory, type, doc)).ToArray();
            return(base.ToSqlString(criteria, criteriaQuery));
        }
Exemplo n.º 3
0
        public static IEnumerable <object> GetIds(SearchFactoryImpl sf, Type type, Query query)
        {
            Iesi.Collections.Generic.ISet <Type> types;
            var searcher = FullTextSearchHelper.BuildSearcher(sf, out types, type);

            if (searcher == null)
            {
                throw new SearchException("Could not find a searcher for class: " + type.FullName);
            }

            try {
                var q = FullTextSearchHelper.FilterQueryByClasses(types, query);
                return(GetIds(sf, searcher, type, q));
            }
            finally {
                searcher.Close();
            }
        }
Exemplo n.º 4
0
        private static bool MatchesRestrictions(FileSystemInfo info)
        {
            var matches = false;

            //ToDo: здесь добавить поиски по различным расширениям файлов (и для незапороленных архивов распаковать сначала, потом все файлы проверять)
            if (_searchParams.ContainingChecked)
            {
                switch (new FileInfo(info.FullName).Extension.ToLower())
                {
                case ".txt":
                case ".ini":
                case ".json":
                case ".csv":
                case ".yaml":
                    try
                    {
                        var encoding = TextFileEncodingHelper.DetectTextFileEncoding(info.FullName) ?? _searchParams.Encoding;
                        using (var sr = new StreamReader(info.FullName, encoding))
                            matches = sr.ReadToEnd().IndexOf(_searchParams.ContainingText, StringComparison.OrdinalIgnoreCase) >= 0;
                    }
                    catch (Exception)
                    {
                        matches = false;
                    }
                    break;

                case ".rtf":
                    using (var rtBox = new System.Windows.Forms.RichTextBox())
                    {
                        rtBox.Rtf = File.ReadAllText(info.FullName);
                        matches   = rtBox.Text.Replace("\r\n", ",").IndexOf(_searchParams.ContainingText, StringComparison.OrdinalIgnoreCase) >= 0;
                    }
                    break;

                case ".pdf":
                    matches = FullTextSearchHelper.FindTextInPdfFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".doc":
                    matches = FullTextSearchHelper.FindTextInDocFile(info.FullName, _searchParams.ContainingText);
                    break;

                case ".docx":
                case ".html":
                case ".dot":
                case ".dotx":
                case ".dotm":
                case ".odt":
                case ".ott":
                case ".docm":
                    matches = FullTextSearchHelper.FindTextInDocumentFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".xls":
                case ".xlsx":
                    matches = FullTextSearchHelper.FindTextInExcellFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".pptx":
                case ".ppt":
                case ".pot":
                case ".pps":
                case ".potx":
                case ".ppsx":
                case ".odp":
                case ".ppsm":
                case ".pptm":
                    matches = FullTextSearchHelper.FindTextInPresentationFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".one":
                case ".onetoc2":
                    matches = FullTextSearchHelper.FindTextInOneNoteFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".epub":
                    matches = FullTextSearchHelper.FindTextInEpubFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".fb2":
                    matches = FullTextSearchHelper.FindTextInFb2File(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".vsdx":
                case ".xps":
                    matches = FullTextSearchHelper.FindTextInPackageFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    break;

                case ".png":
                case ".bmp":
                case ".gif":
                case ".jpeg":
                case ".tiff":
                case ".tif":
                    if (_searchParams.SearchInImages)
                    {
                        matches = FullTextSearchHelper.FindTextInImageFile(info.FullName, _searchParams.ContainingText, ref _cancellationTokenSource);
                    }
                    break;

                case ".zip":
                    if (_searchParams.SearchInZipArchive)
                    {
                        // ToDo: проверять для всех файлов архива
                        // 1. Распаковать файлы архива во временный каталог
                        // 2. Для каждого файла вызывать поиск
                        // 3. Потом удалить временный каталог вместе с файлаами

                        //using (var fPackage = Package.Open(info.FullName, FileMode.Open, FileAccess.Read))
                        //{
                        //    foreach (var fPart in fPackage.GetParts())
                        //    {
                        //        if (_cancellationTokenSource.IsCancellationRequested)
                        //            break;

                        //        using (var fPartStream = fPart.GetStream(FileMode.Open))
                        //        {
                        //            using (var textReader = new StreamReader(fPartStream))
                        //            {
                        //                var fPartText = textReader.ReadToEnd();
                        //                if (fPartText.Contains(_searchParams.ContainingText))
                        //                    matches = true;
                        //            }
                        //        }
                        //    }
                        //}
                    }
                    matches = false;
                    break;

                default:
                    matches = FileContainsBytes(info);
                    break;
                }
            }

            return(matches);
        }