Esempio n. 1
0
        private void IndexFolder(DateTime?startDate, int portalId, string folderPath)
        {
            LuceneController.ClearInstance();
            try
            {
                using (var lc = LuceneController.Instance)
                {
                    var fileIndexer = new DnnFilesRepository();
                    if (!startDate.HasValue)
                    {
                        Log.Logger.InfoFormat("Reindexing documents from Portal {0} folder {1}", portalId, folderPath);
                    }
                    var indexSince = FixedIndexingStartDate(portalId, startDate ?? DateTime.MinValue);
                    List <LuceneIndexItem> searchDocs = fileIndexer.GetPortalSearchDocuments(portalId, folderPath, true, indexSince).ToList();
                    Log.Logger.DebugFormat("Found {2} documents from Portal {0} folder {1} to index", portalId, folderPath, searchDocs.Count());

                    FieldConfig indexJson = FilesRepository.GetIndexConfig(portalId);
                    foreach (LuceneIndexItem indexItem in searchDocs)
                    {
                        Delete(indexItem, lc);
                        lc.Store.Add(LuceneMappingUtils.CreateLuceneDocument(indexItem, indexJson));
                    }
                    Log.Logger.DebugFormat("Indexed {2} documents from Portal {0} folder {1}", portalId, folderPath, searchDocs.Count());
                    lc.Store.Commit();
                    lc.Store.OptimizeSearchIndex(true);
                }
            }
            finally
            {
                LuceneController.ClearInstance();
            }
        }
Esempio n. 2
0
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Returns the collection of SearchDocuments populated with Tab MetaData for the given portal.
        /// </summary>
        /// <param name="portalId"></param>
        /// <param name="folderPath"></param>
        /// <param name="recursive"></param>
        /// <param name="startDateLocal"></param>
        /// <returns></returns>
        /// <history>
        ///     [vnguyen]   04/16/2013  created
        /// </history>
        /// -----------------------------------------------------------------------------
        public IEnumerable <LuceneIndexItem> GetPortalSearchDocuments(int portalId, string folderPath, bool recursive, DateTime?startDateLocal)
        {
            var searchDocuments = new List <LuceneIndexItem>();
            var folderManager   = FolderManager.Instance;
            var folder          = folderManager.GetFolder(portalId, folderPath);
            var files           = folderManager.GetFiles(folder, recursive);

            if (startDateLocal.HasValue)
            {
                files = files.Where(f => f.LastModifiedOnDate > startDateLocal.Value);
            }
            try
            {
                FieldConfig indexConfig = FilesRepository.GetIndexConfig(portalId);
                foreach (var file in files)
                {
                    var indexData = LuceneMappingUtils.CreateLuceneItem(file, indexConfig);
                    searchDocuments.Add(indexData);
                }
            }
            catch (Exception ex)
            {
                Exceptions.LogException(ex);
            }

            return(searchDocuments);
        }
Esempio n. 3
0
        private void Add(LuceneIndexItem data, LuceneController storeInstance)
        {
            if (null == data)
            {
                throw new ArgumentNullException("data");
            }

            FieldConfig indexJson = FilesRepository.GetIndexConfig(data.PortalId);

            Store.Add(LuceneMappingUtils.CreateLuceneDocument(data, indexJson));
        }
Esempio n. 4
0
        private void DeleteFolder(int portalId, string folderPath, LuceneController storeInstance)
        {
            Query deleteQuery = LuceneMappingUtils.GetDeleteFolderQuery(portalId, folderPath);

            if (storeInstance == null)
            {
                Store.Delete(deleteQuery);
            }
            else
            {
                storeInstance.Store.Delete(deleteQuery);
            }
        }
Esempio n. 5
0
        private void Delete(LuceneIndexItem data, LuceneController storeInstance)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            Query deleteQuery = LuceneMappingUtils.GetDeleteQuery(data);

            if (storeInstance == null)
            {
                Store.Delete(deleteQuery);
            }
            else
            {
                storeInstance.Store.Delete(deleteQuery);
            }
        }
Esempio n. 6
0
        public HttpResponseMessage List(RequestDTO req)
        {
            try
            {
                Log.Logger.DebugFormat("OpenFiles.JplistApiController.List() called with request [{0}].", req.ToJson());

                FieldConfig  indexConfig  = FilesRepository.GetIndexConfig(PortalSettings.PortalId);
                bool         addWorkFlow  = PortalSettings.UserMode != PortalSettings.Mode.Edit;
                QueryBuilder queryBuilder = new QueryBuilder(indexConfig);
                queryBuilder.BuildFilter(PortalSettings.PortalId, req.folder, addWorkFlow, PortalSettings.UserInfo.Social.Roles);
                JplistQueryBuilder.MergeJpListQuery(FilesRepository.GetIndexConfig(PortalSettings), queryBuilder.Select, req.StatusLst, DnnLanguageUtils.GetCurrentCultureCode());

                string curFolder = NormalizePath(req.folder);
                foreach (var item in queryBuilder.Select.Query.FilterRules.Where(f => f.Field == LuceneMappingUtils.FolderField))
                {
                    curFolder  = NormalizePath(item.Value.AsString);
                    item.Value = new StringRuleValue(NormalizePath(item.Value.AsString)); //any file of current folder
                }

                var def = new SelectQueryDefinition();
                def.Build(queryBuilder.Select);

                var docs  = LuceneController.Instance.Search(def);
                int total = docs.TotalResults;



                var ratio = string.IsNullOrEmpty(req.imageRatio) ? new Ratio(100, 100) : new Ratio(req.imageRatio);

                Log.Logger.DebugFormat("OpenFiles.JplistApiController.List() Searched for [{0}], found [{1}] items", def.Filter.ToString() + " / " + def.Query.ToString(), total);

                //if (LogContext.IsLogActive)
                //{
                //    var logKey = "Query";
                //    LogContext.Log(ActiveModule.ModuleID, logKey, "select", queryBuilder.Select);
                //    LogContext.Log(ActiveModule.ModuleID, logKey, "debuginfo", dsItems.DebugInfo);
                //    LogContext.Log(ActiveModule.ModuleID, logKey, "model", model);
                //    model["Logs"] = JToken.FromObject(LogContext.Current.ModuleLogs(ActiveModule.ModuleID));
                //}

                var fileManager = FileManager.Instance;
                var data        = new List <FileDTO>();
                var breadcrumbs = new List <IFolderInfo>();
                if (req.withSubFolder)
                {
                    //hier blijken we resultaten toe te voegen die niet uit lucene komen
                    breadcrumbs = AddFolders(NormalizePath(req.folder), curFolder, fileManager, data, ratio);
                }

                foreach (var doc in docs.ids)
                {
                    IFileInfo f = fileManager.GetFile(doc.FileId);
                    if (f == null)
                    {
                        //file seems to have been deleted
                        LuceneController.Instance.Delete(LuceneMappingUtils.CreateLuceneItem(doc.PortalId, doc.FileId));
                        total -= 1;
                    }
                    else
                    {
                        if (f.FileName == "_folder.jpg")
                        {
                            continue; // skip
                        }
                        dynamic title  = null;
                        var     custom = GetCustomFileDataAsDynamic(f);
                        if (custom != null && custom.meta != null)
                        {
                            try
                            {
                                title = Normalize.DynamicValue(custom.meta.title, "");
                            }
                            catch (Exception ex)
                            {
                                Log.Logger.Debug("OpenFiles.JplistApiController.List() Failed to get title.", ex);
                            }
                        }

                        data.Add(new FileDTO()
                        {
                            Id                 = f.FileId,
                            Name               = Normalize.DynamicValue(title, f.FileName),
                            FileName           = f.FileName,
                            CreatedOnDate      = f.CreatedOnDate,
                            LastModifiedOnDate = f.LastModifiedOnDate,
                            FolderName         = f.Folder,
                            Url                = fileManager.GetUrl(f),
                            IsImage            = fileManager.IsImageFile(f),
                            ImageUrl           = ImageHelper.GetImageUrl(f, ratio),
                            Custom             = custom,
                            IconUrl            = GetFileIconUrl(f.Extension),
                            IsEditable         = IsEditable,
                            EditUrl            = IsEditable ? GetFileEditUrl(f) : ""
                        });
                    }
                }

                var res = new ResultExtDTO <FileDTO>()
                {
                    data = new ResultDataDTO <FileDTO>()
                    {
                        items       = data,
                        breadcrumbs = breadcrumbs.Select(f => new ResultBreadcrumbDTO
                        {
                            name = f.FolderName,
                            path = f.FolderPath.Trim('/')
                        })
                    },
                    count = total
                };
                return(Request.CreateResponse(HttpStatusCode.OK, res));
            }
            catch (Exception exc)
            {
                Log.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
Esempio n. 7
0
 private LuceneController()
 {
     _serviceInstance = new LuceneService(AppConfig.Instance.LuceneIndexFolder, LuceneMappingUtils.GetAnalyser());
 }