mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-21 03:14:10 +08:00
Managing multiple indexes
--HG-- branch : 1.x extra : rebase_source : 930ebcb3cc0c50b45beac39a81658ace562c8e04
This commit is contained in:
@@ -11,6 +11,7 @@ namespace Orchard.Indexing.Services {
|
||||
}
|
||||
|
||||
public interface IIndexingService : IDependency {
|
||||
void DeleteIndex(string indexName);
|
||||
void RebuildIndex(string indexName);
|
||||
void UpdateIndex(string indexName);
|
||||
IndexEntry GetIndexEntry(string indexName);
|
||||
|
||||
@@ -4,7 +4,8 @@ namespace Orchard.Indexing.Services {
|
||||
public enum IndexingStatus {
|
||||
Rebuilding,
|
||||
Updating,
|
||||
Idle
|
||||
Idle,
|
||||
Unavailable
|
||||
}
|
||||
public interface IIndexStatisticsProvider : IDependency {
|
||||
DateTime GetLastIndexedUtc(string indexName);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
namespace Orchard.Indexing.Services {
|
||||
public interface IIndexingTaskExecutor : IDependency {
|
||||
bool DeleteIndex(string indexName);
|
||||
bool RebuildIndex(string indexName);
|
||||
bool UpdateIndexBatch(string indexName);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.Localization;
|
||||
using Orchard.UI.Notify;
|
||||
using Orchard.Validation;
|
||||
|
||||
namespace Orchard.Indexing.Services
|
||||
{
|
||||
@@ -28,12 +29,14 @@ namespace Orchard.Indexing.Services
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public void RebuildIndex(string indexName) {
|
||||
Argument.ThrowIfNullOrEmpty(indexName, "indexName");
|
||||
|
||||
if (!_indexManager.HasIndexProvider()) {
|
||||
Services.Notifier.Warning(T("There is no search index to rebuild."));
|
||||
Services.Notifier.Warning(T("There is no index to rebuild."));
|
||||
return;
|
||||
}
|
||||
|
||||
if(_indexingTaskExecutor.DeleteIndex(indexName)) {
|
||||
if(_indexingTaskExecutor.RebuildIndex(indexName)) {
|
||||
Services.Notifier.Information(T("The index {0} has been rebuilt.", indexName));
|
||||
UpdateIndex(indexName);
|
||||
}
|
||||
@@ -42,7 +45,24 @@ namespace Orchard.Indexing.Services
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteIndex(string indexName) {
|
||||
Argument.ThrowIfNullOrEmpty(indexName, "indexName");
|
||||
|
||||
if (!_indexManager.HasIndexProvider()) {
|
||||
Services.Notifier.Warning(T("There is no index to delete."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (_indexingTaskExecutor.DeleteIndex(indexName)) {
|
||||
Services.Notifier.Information(T("The index {0} has been deleted.", indexName));
|
||||
}
|
||||
else {
|
||||
Services.Notifier.Warning(T("The index {0} could not be deleted. It might already be in use, please try again later.", indexName));
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateIndex(string indexName) {
|
||||
Argument.ThrowIfNullOrEmpty(indexName, "indexName");
|
||||
|
||||
foreach(var handler in _indexNotifierHandlers) {
|
||||
handler.UpdateIndex(indexName);
|
||||
@@ -52,6 +72,8 @@ namespace Orchard.Indexing.Services
|
||||
}
|
||||
|
||||
IndexEntry IIndexingService.GetIndexEntry(string indexName) {
|
||||
Argument.ThrowIfNullOrEmpty(indexName, "indexName");
|
||||
|
||||
var provider = _indexManager.GetSearchIndexProvider();
|
||||
if (provider == null)
|
||||
return null;
|
||||
|
||||
@@ -9,18 +9,26 @@ namespace Orchard.Indexing.Services {
|
||||
[UsedImplicitly]
|
||||
public class IndexingBackgroundTask : IBackgroundTask {
|
||||
private readonly IIndexNotifierHandler _indexNotifierHandler;
|
||||
private const string SearchIndexName = "Search";
|
||||
private readonly IIndexManager _indexManager;
|
||||
|
||||
public IndexingBackgroundTask(
|
||||
IIndexNotifierHandler indexNotifierHandler) {
|
||||
IIndexNotifierHandler indexNotifierHandler,
|
||||
IIndexManager indexManager) {
|
||||
_indexNotifierHandler = indexNotifierHandler;
|
||||
_indexManager = indexManager;
|
||||
Logger = NullLogger.Instance;
|
||||
}
|
||||
|
||||
public ILogger Logger { get; set; }
|
||||
|
||||
public void Sweep() {
|
||||
_indexNotifierHandler.UpdateIndex(SearchIndexName);
|
||||
if (!_indexManager.HasIndexProvider()) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var index in _indexManager.GetSearchIndexProvider().List()) {
|
||||
_indexNotifierHandler.UpdateIndex(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,17 @@ namespace Orchard.Indexing.Services {
|
||||
|
||||
public ILogger Logger { get; set; }
|
||||
|
||||
public bool RebuildIndex(string indexName) {
|
||||
|
||||
if (DeleteIndex(indexName)) {
|
||||
var searchProvider = _indexManager.GetSearchIndexProvider();
|
||||
searchProvider.CreateIndex(indexName);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool DeleteIndex(string indexName) {
|
||||
ILockFile lockFile = null;
|
||||
var settingsFilename = GetSettingsFileName(indexName);
|
||||
|
||||
Reference in New Issue
Block a user