diff --git a/src/Orchard.Web/Modules/Lucene/Services/LuceneIndexProvider.cs b/src/Orchard.Web/Modules/Lucene/Services/LuceneIndexProvider.cs index d77d0383e..c0b8dc3b9 100644 --- a/src/Orchard.Web/Modules/Lucene/Services/LuceneIndexProvider.cs +++ b/src/Orchard.Web/Modules/Lucene/Services/LuceneIndexProvider.cs @@ -114,19 +114,23 @@ namespace Lucene.Services { } public void CreateIndex(string indexName) { - var writer = new IndexWriter(GetDirectory(indexName), _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); - writer.Close(); + lock ( _appDataFolder ) { + var writer = new IndexWriter(GetDirectory(indexName), _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); + writer.Close(); + } Logger.Information("Index [{0}] created", indexName); } public void DeleteIndex(string indexName) { - new DirectoryInfo(_appDataFolder.MapPath(_appDataFolder.Combine(_basePath, indexName))) - .Delete(true); + lock ( _appDataFolder ) { + new DirectoryInfo(_appDataFolder.MapPath(_appDataFolder.Combine(_basePath, indexName))) + .Delete(true); - var settingsFileName = GetSettingsFileName(indexName); - if(File.Exists(settingsFileName)) { - File.Delete(settingsFileName); + var settingsFileName = GetSettingsFileName(indexName); + if (File.Exists(settingsFileName)) { + File.Delete(settingsFileName); + } } } @@ -146,25 +150,27 @@ namespace Lucene.Services { // Remove any previous document for these content items Delete(indexName, indexDocuments.Select(i => i.ContentItemId)); - var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); - LuceneDocumentIndex current = null; + lock ( _appDataFolder ) { + var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); + LuceneDocumentIndex current = null; - try { + try { - foreach ( var indexDocument in indexDocuments ) { - current = indexDocument; - var doc = CreateDocument(indexDocument); - - writer.AddDocument(doc); - Logger.Debug("Document [{0}] indexed", indexDocument.ContentItemId); + foreach (var indexDocument in indexDocuments) { + current = indexDocument; + var doc = CreateDocument(indexDocument); + + writer.AddDocument(doc); + Logger.Debug("Document [{0}] indexed", indexDocument.ContentItemId); + } + } + catch (Exception ex) { + Logger.Error(ex, "An unexpected error occured while add the document [{0}] from the index [{1}].", current.ContentItemId, indexName); + } + finally { + writer.Optimize(); + writer.Close(); } - } - catch ( Exception ex ) { - Logger.Error(ex, "An unexpected error occured while add the document [{0}] from the index [{1}].", current.ContentItemId, indexName); - } - finally { - writer.Optimize(); - writer.Close(); } } @@ -177,25 +183,28 @@ namespace Lucene.Services { return; } - var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); + lock ( _appDataFolder ) { - try { - var query = new BooleanQuery(); + var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); try { - foreach (var id in documentIds) { - query.Add(new BooleanClause(new TermQuery(new Term("id", id.ToString())), BooleanClause.Occur.SHOULD)); - } + var query = new BooleanQuery(); - writer.DeleteDocuments(query); + try { + foreach (var id in documentIds) { + query.Add(new BooleanClause(new TermQuery(new Term("id", id.ToString())), BooleanClause.Occur.SHOULD)); + } + + writer.DeleteDocuments(query); + } + catch (Exception ex) { + Logger.Error(ex, "An unexpected error occured while removing the documents [{0}] from the index [{1}].", String.Join(", ", documentIds), indexName); + } } - catch (Exception ex) { - Logger.Error(ex, "An unexpected error occured while removing the documents [{0}] from the index [{1}].", String.Join(", ", documentIds), indexName); + finally { + writer.Close(); } } - finally { - writer.Close(); - } } public IDocumentIndex New(int documentId) { diff --git a/src/Orchard.Web/Modules/Lucene/Services/LuceneSearchBuilder.cs b/src/Orchard.Web/Modules/Lucene/Services/LuceneSearchBuilder.cs index b6c689e20..74d310a6f 100644 --- a/src/Orchard.Web/Modules/Lucene/Services/LuceneSearchBuilder.cs +++ b/src/Orchard.Web/Modules/Lucene/Services/LuceneSearchBuilder.cs @@ -47,6 +47,7 @@ namespace Lucene.Services { InitPendingClause(); } + public ISearchBuilder Parse(string defaultField, string query) { return Parse(new string[] {defaultField}, query); } diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs index ff0b59942..fad36f498 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/CreateIndexingTaskHandler.cs @@ -1,4 +1,5 @@ -using Orchard.ContentManagement.Handlers; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement; using Orchard.Core.Common.Models; using Orchard.Tasks.Indexing; @@ -21,16 +22,18 @@ namespace Orchard.Indexing.Handlers { _indexingTaskManager = indexingTaskManager; _indexNotifierHandlers = indexNotifierHandlers; - OnPublishing>(CreateIndexingTask); - OnRemoved>(RemoveIndexingTask); + OnPublishing(CreateIndexingTask); + OnRemoved(RemoveIndexingTask); } - void CreateIndexingTask(PublishContentContext context, ContentPart part) { + void CreateIndexingTask(PublishContentContext context, ContentPart part) { _indexingTaskManager.CreateUpdateIndexTask(context.ContentItem); + UpdateIndex(); } - void RemoveIndexingTask(RemoveContentContext context, ContentPart part) { + void RemoveIndexingTask(RemoveContentContext context, ContentPart part) { _indexingTaskManager.CreateDeleteIndexTask(context.ContentItem); + UpdateIndex(); } private void UpdateIndex() { diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/InfosetFieldIndexingHandler.cs b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/InfosetFieldIndexingHandler.cs index cc82f3055..feeed3de8 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/InfosetFieldIndexingHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Indexing/Handlers/InfosetFieldIndexingHandler.cs @@ -13,15 +13,20 @@ namespace Orchard.Indexing.Handlers { OnIndexing( (context, cp) => { var infosetPart = context.ContentItem.As(); - if ( infosetPart != null ) { - foreach ( var part in infosetPart.ContentItem.Parts ) { - foreach ( var field in part.PartDefinition.Fields ) { - if ( field.Settings.GetModel().Included ) { - var fieldName = field.Name; - var value = part.Fields.Where(f => f.Name == fieldName).First().Storage.Get(null); - context.DocumentIndex.Add(String.Format("{0}-{1}", infosetPart.TypeDefinition.Name, fieldName.ToLower()), value).RemoveTags().Analyze(); - } + if (infosetPart == null) { + return; + } + + // part fields + foreach ( var part in infosetPart.ContentItem.Parts ) { + foreach ( var field in part.PartDefinition.Fields ) { + if (!field.Settings.GetModel().Included) { + continue; } + + var fieldName = field.Name; + var value = part.Fields.Where(f => f.Name == fieldName).First().Storage.Get(null); + context.DocumentIndex.Add(String.Format("{0}-{1}", infosetPart.TypeDefinition.Name.ToLower(), fieldName.ToLower()), value).RemoveTags().Analyze(); } } }); diff --git a/src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingTaskExecutor.cs b/src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingTaskExecutor.cs index a883564d1..4ed5951b4 100644 --- a/src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingTaskExecutor.cs +++ b/src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingTaskExecutor.cs @@ -103,8 +103,10 @@ namespace Orchard.Indexing.Services { // nothing to do ? - if (taskRecords.Length + updateIndexDocuments.Count == 0) + if (taskRecords.Length + updateIndexDocuments.Count == 0) { + Logger.Information("Index update requested, nothing to do"); return; + } Logger.Information("Processing {0} indexing tasks", taskRecords.Length);