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(); } }
/// ----------------------------------------------------------------------------- /// <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); }
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)); }
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); } }
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); } }
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)); } }
private LuceneController() { _serviceInstance = new LuceneService(AppConfig.Instance.LuceneIndexFolder, LuceneMappingUtils.GetAnalyser()); }