Merge pull request #4393 from sbwalker/dev

site settings to configure indexing
This commit is contained in:
Shaun Walker 2024-07-08 14:33:54 -04:00 committed by GitHub
commit 12ae2d0c76
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Oqtane.Extensions;
using Oqtane.Interfaces;
using Oqtane.Models;
using Oqtane.Repository;
@ -14,6 +15,9 @@ namespace Oqtane.Infrastructure
public class SearchIndexJob : HostedServiceBase
{
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)
{
@ -41,10 +45,22 @@ namespace Oqtane.Infrastructure
log += $"Indexing Site: {site.Name}<br />";
// initialize
var currentTime = DateTime.UtcNow;
var lastIndexedOn = GetSearchLastIndexedOn(settingRepository, site.SiteId);
var siteSettings = settingRepository.GetSettings(EntityNames.Site, site.SiteId).ToDictionary(setting => setting.SettingName, setting => setting.SettingValue);
if (!Convert.ToBoolean(siteSettings.GetValue(SearchEnabledSetting, "true")))
{
log += $"Indexing Disabled<br />";
continue;
}
var tenantId = tenantManager.GetTenant().TenantId;
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 pageModules = pageModuleRepository.GetPageModules(site.SiteId);
var searchContents = new List<SearchContent>();
@ -52,7 +68,7 @@ namespace Oqtane.Infrastructure
// index pages
foreach (var page in pages)
{
if (Constants.InternalPagePaths.Contains(page.Path))
if (Constants.InternalPagePaths.Contains(page.Path) || ignorePaths.Contains(page.Path))
{
continue;
}
@ -60,7 +76,7 @@ namespace Oqtane.Infrastructure
bool changed = false;
bool removed = false;
if (page.ModifiedOn >= lastIndexedOn)
if (page.ModifiedOn >= lastIndexedOn && !ignoreEntities.Contains(EntityNames.Page))
{
changed = true;
removed = page.IsDeleted || !Utilities.IsEffectiveOrExpired(page.EffectiveDate, page.ExpiryDate);
@ -88,7 +104,7 @@ namespace Oqtane.Infrastructure
// index modules
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
{
if (pageModule.ModifiedOn >= lastIndexedOn)
if (pageModule.ModifiedOn >= lastIndexedOn && !changed)
{
changed = true;
}
@ -113,8 +129,11 @@ namespace Oqtane.Infrastructure
{
foreach (var searchContent in searchcontents)
{
SaveModuleMetaData(searchContent, pageModule, tenantId, removed);
searchContents.Add(searchContent);
if (!ignoreEntities.Contains(searchContent.EntityName))
{
SaveModuleMetaData(searchContent, pageModule, tenantId, removed);
searchContents.Add(searchContent);
}
}
}
}
@ -125,7 +144,7 @@ namespace Oqtane.Infrastructure
}
}
if (!searchable && changed)
if (!searchable && changed && !ignoreEntities.Contains(EntityNames.Module))
{
// module does not implement ISearchable
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)
{
var setting = settingRepository.GetSetting(EntityNames.Site, siteId, SearchLastIndexedOnSetting);