Browse Source

refactor elastic cache

pull/8989/head
Alper Ebicoglu 5 years ago
parent
commit
636cf02de7
  1. 12
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs
  2. 48
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs
  3. 10
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs
  4. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/IDocumentFullSearch.cs

12
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs

@ -27,7 +27,7 @@ namespace Volo.Docs.Admin.Documents
private readonly IDistributedCache<DocumentUpdateInfo> _documentUpdateCache; private readonly IDistributedCache<DocumentUpdateInfo> _documentUpdateCache;
private readonly IDistributedCache<List<VersionInfo>> _versionCache; private readonly IDistributedCache<List<VersionInfo>> _versionCache;
private readonly IDistributedCache<LanguageConfig> _languageCache; private readonly IDistributedCache<LanguageConfig> _languageCache;
private readonly IDocumentFullSearch _documentFullSearch; private readonly IDocumentFullSearch _elasticSearchService;
public DocumentAdminAppService(IProjectRepository projectRepository, public DocumentAdminAppService(IProjectRepository projectRepository,
IDocumentRepository documentRepository, IDocumentRepository documentRepository,
@ -35,7 +35,7 @@ namespace Volo.Docs.Admin.Documents
IDistributedCache<DocumentUpdateInfo> documentUpdateCache, IDistributedCache<DocumentUpdateInfo> documentUpdateCache,
IDistributedCache<List<VersionInfo>> versionCache, IDistributedCache<List<VersionInfo>> versionCache,
IDistributedCache<LanguageConfig> languageCache, IDistributedCache<LanguageConfig> languageCache,
IDocumentFullSearch documentFullSearch) IDocumentFullSearch elasticSearchService)
{ {
_projectRepository = projectRepository; _projectRepository = projectRepository;
_documentRepository = documentRepository; _documentRepository = documentRepository;
@ -43,7 +43,7 @@ namespace Volo.Docs.Admin.Documents
_documentUpdateCache = documentUpdateCache; _documentUpdateCache = documentUpdateCache;
_versionCache = versionCache; _versionCache = versionCache;
_languageCache = languageCache; _languageCache = languageCache;
_documentFullSearch = documentFullSearch; _elasticSearchService = elasticSearchService;
LocalizationResource = typeof(DocsResource); LocalizationResource = typeof(DocsResource);
} }
@ -210,9 +210,11 @@ namespace Volo.Docs.Admin.Documents
public async Task ReindexAsync(Guid documentId) public async Task ReindexAsync(Guid documentId)
{ {
await _documentFullSearch.DeleteAsync(documentId); _elasticSearchService.ValidateElasticSearchEnabled();
await _elasticSearchService.DeleteAsync(documentId);
var document = await _documentRepository.GetAsync(documentId); var document = await _documentRepository.GetAsync(documentId);
await _documentFullSearch.AddOrUpdateAsync(document); await _elasticSearchService.AddOrUpdateAsync(document);
} }
private async Task UpdateDocumentUpdateInfoCache(Document document) private async Task UpdateDocumentUpdateInfoCache(Document document)

48
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
@ -18,13 +17,13 @@ namespace Volo.Docs.Admin.Projects
{ {
private readonly IProjectRepository _projectRepository; private readonly IProjectRepository _projectRepository;
private readonly IDocumentRepository _documentRepository; private readonly IDocumentRepository _documentRepository;
private readonly IDocumentFullSearch _documentFullSearch; private readonly IDocumentFullSearch _elasticSearchService;
private readonly IGuidGenerator _guidGenerator; private readonly IGuidGenerator _guidGenerator;
public ProjectAdminAppService( public ProjectAdminAppService(
IProjectRepository projectRepository, IProjectRepository projectRepository,
IDocumentRepository documentRepository, IDocumentRepository documentRepository,
IDocumentFullSearch documentFullSearch, IDocumentFullSearch elasticSearchService,
IGuidGenerator guidGenerator) IGuidGenerator guidGenerator)
{ {
ObjectMapperContext = typeof(DocsAdminApplicationModule); ObjectMapperContext = typeof(DocsAdminApplicationModule);
@ -32,7 +31,7 @@ namespace Volo.Docs.Admin.Projects
_projectRepository = projectRepository; _projectRepository = projectRepository;
_documentRepository = documentRepository; _documentRepository = documentRepository;
_documentFullSearch = documentFullSearch; _elasticSearchService = elasticSearchService;
_guidGenerator = guidGenerator; _guidGenerator = guidGenerator;
} }
@ -120,11 +119,21 @@ namespace Volo.Docs.Admin.Projects
public async Task ReindexAsync(ReindexInput input) public async Task ReindexAsync(ReindexInput input)
{ {
var project = await _projectRepository.GetAsync(input.ProjectId); _elasticSearchService.ValidateElasticSearchEnabled();
await _documentFullSearch.DeleteAllByProjectIdAsync(project.Id); await ReindexProjectAsync(input.ProjectId);
}
private async Task ReindexProjectAsync(Guid projectId)
{
var project = await _projectRepository.FindAsync(projectId);
if (project == null)
{
throw new Exception("Cannot find the project with the Id " + projectId);
}
var docs = await _documentRepository.GetListByProjectId(project.Id); var docs = await _documentRepository.GetListByProjectId(project.Id);
await _elasticSearchService.DeleteAllByProjectIdAsync(project.Id);
foreach (var doc in docs) foreach (var doc in docs)
{ {
@ -138,35 +147,18 @@ namespace Volo.Docs.Admin.Projects
continue; continue;
} }
await _documentFullSearch.AddOrUpdateAsync(doc); await _elasticSearchService.AddOrUpdateAsync(doc);
} }
} }
public async Task ReindexAllAsync() public async Task ReindexAllAsync()
{ {
await _documentFullSearch.DeleteAllAsync(); _elasticSearchService.ValidateElasticSearchEnabled();
var docs = await _documentRepository.GetListAsync();
var projects = await _projectRepository.GetListAsync(); var projects = await _projectRepository.GetListAsync();
foreach (var doc in docs)
foreach (var project in projects)
{ {
var project = projects.FirstOrDefault(x => x.Id == doc.ProjectId); await ReindexProjectAsync(project.Id);
if (project == null)
{
continue;
}
if (doc.FileName == project.NavigationDocumentName)
{
continue;
}
if (doc.FileName == project.ParametersDocumentName)
{
continue;
}
await _documentFullSearch.AddOrUpdateAsync(doc);
} }
} }
} }

10
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs

@ -56,8 +56,6 @@ namespace Volo.Docs.Documents.FullSearch.Elastic
public virtual async Task AddOrUpdateAsync(Document document, CancellationToken cancellationToken = default) public virtual async Task AddOrUpdateAsync(Document document, CancellationToken cancellationToken = default)
{ {
ValidateElasticSearchEnabled();
var client = _clientProvider.GetClient(); var client = _clientProvider.GetClient();
var esDocument = new EsDocument var esDocument = new EsDocument
@ -71,15 +69,13 @@ namespace Volo.Docs.Documents.FullSearch.Elastic
Version = NormalizeField(document.Version) Version = NormalizeField(document.Version)
}; };
await client.IndexAsync(esDocument , x=>x.Index(_options.IndexName), cancellationToken); await client.IndexAsync(esDocument, x => x.Index(_options.IndexName), cancellationToken);
} }
public virtual async Task DeleteAsync(Guid id, CancellationToken cancellationToken = default) public virtual async Task DeleteAsync(Guid id, CancellationToken cancellationToken = default)
{ {
ValidateElasticSearchEnabled();
HandleError(await _clientProvider.GetClient() HandleError(await _clientProvider.GetClient()
.DeleteAsync(DocumentPath<Document>.Id( NormalizeField(id)), x => x.Index(_options.IndexName), cancellationToken)); .DeleteAsync(DocumentPath<Document>.Id(NormalizeField(id)), x => x.Index(_options.IndexName), cancellationToken));
} }
public virtual async Task DeleteAllAsync(CancellationToken cancellationToken = default) public virtual async Task DeleteAllAsync(CancellationToken cancellationToken = default)
@ -210,7 +206,7 @@ namespace Volo.Docs.Documents.FullSearch.Elastic
} }
} }
protected virtual void ValidateElasticSearchEnabled() public virtual void ValidateElasticSearchEnabled()
{ {
if (!_options.Enable) if (!_options.Enable)
{ {

2
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/IDocumentFullSearch.cs

@ -20,5 +20,7 @@ namespace Volo.Docs.Documents.FullSearch.Elastic
Task<List<EsDocument>> SearchAsync(string context, Guid projectId, string languageCode, Task<List<EsDocument>> SearchAsync(string context, Guid projectId, string languageCode,
string version, int? skipCount = null, int? maxResultCount = null, string version, int? skipCount = null, int? maxResultCount = null,
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
void ValidateElasticSearchEnabled();
} }
} }

Loading…
Cancel
Save