From 9d91d5a127a0fab919c73094a22f84eb23364d00 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Mon, 8 Jul 2024 14:33:16 -0400 Subject: [PATCH] site settings to configure indexing --- .../Infrastructure/Jobs/SearchIndexJob.cs | 48 +++++++++++-------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/Oqtane.Server/Infrastructure/Jobs/SearchIndexJob.cs b/Oqtane.Server/Infrastructure/Jobs/SearchIndexJob.cs index 6c1b2df0..94ffca11 100644 --- a/Oqtane.Server/Infrastructure/Jobs/SearchIndexJob.cs +++ b/Oqtane.Server/Infrastructure/Jobs/SearchIndexJob.cs @@ -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}
"; // 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
"; + 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(); @@ -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);