site settings to configure indexing
This commit is contained in:
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Oqtane.Extensions;
|
||||||
using Oqtane.Interfaces;
|
using Oqtane.Interfaces;
|
||||||
using Oqtane.Models;
|
using Oqtane.Models;
|
||||||
using Oqtane.Repository;
|
using Oqtane.Repository;
|
||||||
@ -14,6 +15,9 @@ namespace Oqtane.Infrastructure
|
|||||||
public class SearchIndexJob : HostedServiceBase
|
public class SearchIndexJob : HostedServiceBase
|
||||||
{
|
{
|
||||||
private const string SearchLastIndexedOnSetting = "Search_LastIndexedOn";
|
private const string SearchLastIndexedOnSetting = "Search_LastIndexedOn";
|
||||||
|
private const string SearchEnabledSetting = "Search_Enabled";
|
||||||
|
private const string SearchIgnorePathsSetting = "Search_IgnorePaths";
|
||||||
|
private const string SearchIgnoreEntitiesSetting = "Search_IgnoreEntities";
|
||||||
|
|
||||||
public SearchIndexJob(IServiceScopeFactory serviceScopeFactory) : base(serviceScopeFactory)
|
public SearchIndexJob(IServiceScopeFactory serviceScopeFactory) : base(serviceScopeFactory)
|
||||||
{
|
{
|
||||||
@ -41,10 +45,22 @@ namespace Oqtane.Infrastructure
|
|||||||
log += $"Indexing Site: {site.Name}<br />";
|
log += $"Indexing Site: {site.Name}<br />";
|
||||||
|
|
||||||
// initialize
|
// initialize
|
||||||
var currentTime = DateTime.UtcNow;
|
var siteSettings = settingRepository.GetSettings(EntityNames.Site, site.SiteId).ToDictionary(setting => setting.SettingName, setting => setting.SettingValue);
|
||||||
var lastIndexedOn = GetSearchLastIndexedOn(settingRepository, site.SiteId);
|
|
||||||
|
if (!Convert.ToBoolean(siteSettings.GetValue(SearchEnabledSetting, "true")))
|
||||||
|
{
|
||||||
|
log += $"Indexing Disabled<br />";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
var tenantId = tenantManager.GetTenant().TenantId;
|
var tenantId = tenantManager.GetTenant().TenantId;
|
||||||
tenantManager.SetAlias(tenantId, site.SiteId);
|
tenantManager.SetAlias(tenantId, site.SiteId);
|
||||||
|
|
||||||
|
var currentTime = DateTime.UtcNow;
|
||||||
|
var lastIndexedOn = Convert.ToDateTime(siteSettings.GetValue(SearchLastIndexedOnSetting, DateTime.MinValue.ToString()));
|
||||||
|
var ignorePaths = siteSettings.GetValue(SearchIgnorePathsSetting, "").Split(',');
|
||||||
|
var ignoreEntities = siteSettings.GetValue(SearchIgnoreEntitiesSetting, "").Split(',');
|
||||||
|
|
||||||
var pages = pageRepository.GetPages(site.SiteId);
|
var pages = pageRepository.GetPages(site.SiteId);
|
||||||
var pageModules = pageModuleRepository.GetPageModules(site.SiteId);
|
var pageModules = pageModuleRepository.GetPageModules(site.SiteId);
|
||||||
var searchContents = new List<SearchContent>();
|
var searchContents = new List<SearchContent>();
|
||||||
@ -52,7 +68,7 @@ namespace Oqtane.Infrastructure
|
|||||||
// index pages
|
// index pages
|
||||||
foreach (var page in pages)
|
foreach (var page in pages)
|
||||||
{
|
{
|
||||||
if (Constants.InternalPagePaths.Contains(page.Path))
|
if (Constants.InternalPagePaths.Contains(page.Path) || ignorePaths.Contains(page.Path))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -60,7 +76,7 @@ namespace Oqtane.Infrastructure
|
|||||||
bool changed = false;
|
bool changed = false;
|
||||||
bool removed = false;
|
bool removed = false;
|
||||||
|
|
||||||
if (page.ModifiedOn >= lastIndexedOn)
|
if (page.ModifiedOn >= lastIndexedOn && !ignoreEntities.Contains(EntityNames.Page))
|
||||||
{
|
{
|
||||||
changed = true;
|
changed = true;
|
||||||
removed = page.IsDeleted || !Utilities.IsEffectiveOrExpired(page.EffectiveDate, page.ExpiryDate);
|
removed = page.IsDeleted || !Utilities.IsEffectiveOrExpired(page.EffectiveDate, page.ExpiryDate);
|
||||||
@ -88,7 +104,7 @@ namespace Oqtane.Infrastructure
|
|||||||
// index modules
|
// index modules
|
||||||
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
|
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
|
||||||
{
|
{
|
||||||
if (pageModule.ModifiedOn >= lastIndexedOn)
|
if (pageModule.ModifiedOn >= lastIndexedOn && !changed)
|
||||||
{
|
{
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
@ -112,12 +128,15 @@ namespace Oqtane.Infrastructure
|
|||||||
if (searchcontents != null)
|
if (searchcontents != null)
|
||||||
{
|
{
|
||||||
foreach (var searchContent in searchcontents)
|
foreach (var searchContent in searchcontents)
|
||||||
|
{
|
||||||
|
if (!ignoreEntities.Contains(searchContent.EntityName))
|
||||||
{
|
{
|
||||||
SaveModuleMetaData(searchContent, pageModule, tenantId, removed);
|
SaveModuleMetaData(searchContent, pageModule, tenantId, removed);
|
||||||
searchContents.Add(searchContent);
|
searchContents.Add(searchContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
log += ex.Message + "<br />";
|
log += ex.Message + "<br />";
|
||||||
@ -125,7 +144,7 @@ namespace Oqtane.Infrastructure
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!searchable && changed)
|
if (!searchable && changed && !ignoreEntities.Contains(EntityNames.Module))
|
||||||
{
|
{
|
||||||
// module does not implement ISearchable
|
// module does not implement ISearchable
|
||||||
var searchContent = new SearchContent
|
var searchContent = new SearchContent
|
||||||
@ -218,19 +237,6 @@ namespace Oqtane.Infrastructure
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DateTime GetSearchLastIndexedOn(ISettingRepository settingRepository, int siteId)
|
|
||||||
{
|
|
||||||
var setting = settingRepository.GetSetting(EntityNames.Site, siteId, SearchLastIndexedOnSetting);
|
|
||||||
if (setting != null)
|
|
||||||
{
|
|
||||||
return Convert.ToDateTime(setting.SettingValue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return DateTime.MinValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SaveSearchLastIndexedOn(ISettingRepository settingRepository, int siteId, DateTime lastIndexedOn)
|
private void SaveSearchLastIndexedOn(ISettingRepository settingRepository, int siteId, DateTime lastIndexedOn)
|
||||||
{
|
{
|
||||||
var setting = settingRepository.GetSetting(EntityNames.Site, siteId, SearchLastIndexedOnSetting);
|
var setting = settingRepository.GetSetting(EntityNames.Site, siteId, SearchLastIndexedOnSetting);
|
||||||
|
Reference in New Issue
Block a user