Skip to content

Commit

Permalink
Simplify the Azure Search AI events and centralize setting the FullIn…
Browse files Browse the repository at this point in the history
…dexName (#17596)
  • Loading branch information
MikeAlhayek authored Mar 10, 2025
1 parent d711ff5 commit 2b129dd
Show file tree
Hide file tree
Showing 24 changed files with 218 additions and 172 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -250,25 +250,22 @@ public async Task<IActionResult> CreatePost(string source)
{
try
{
await _indexSettingsService.SetMappingsAsync(settings);
await _indexSettingsService.CreateAsync(settings);

if (await _indexManager.CreateAsync(settings))
{
await _indexSettingsService.UpdateAsync(settings);
await _indexSettingsService.SynchronizeAsync(settings);
await _notifier.SuccessAsync(H["Index <em>{0}</em> created successfully.", settings.IndexName]);

return RedirectToAction(nameof(Index));
}
else
{
await _notifier.ErrorAsync(H["An error occurred while creating the index."]);
}

await _notifier.ErrorAsync(H["An error occurred while creating the index."]);
}
catch (Exception e)
{
await _notifier.ErrorAsync(H["An error occurred while creating the index."]);
_logger.LogError(e, "An error occurred while creating an index {IndexName}.", _indexManager.GetFullIndexName(settings.IndexName));
_logger.LogError(e, "An error occurred while creating an index {IndexName}.", settings.IndexFullName);
}
}

Expand Down Expand Up @@ -328,8 +325,6 @@ public async Task<IActionResult> EditPost(string id)
{
try
{
await _indexSettingsService.SetMappingsAsync(settings);

if (!await _indexManager.CreateAsync(settings))
{
await _notifier.ErrorAsync(H["An error occurred while updating the index."]);
Expand All @@ -348,7 +343,7 @@ public async Task<IActionResult> EditPost(string id)
{
await _notifier.ErrorAsync(H["An error occurred while updating the index."]);

_logger.LogError(e, "An error occurred while updating an index {IndexName}.", _indexManager.GetFullIndexName(settings.IndexName));
_logger.LogError(e, "An error occurred while updating an index {IndexName}.", settings.IndexFullName);
}
}

Expand Down Expand Up @@ -420,7 +415,6 @@ public async Task<IActionResult> Rebuild(string id)
return NotFound();
}

await _indexSettingsService.SetMappingsAsync(settings);
await _indexSettingsService.ResetAsync(settings);
await _indexSettingsService.UpdateAsync(settings);
await _indexManager.RebuildAsync(settings);
Expand Down Expand Up @@ -458,7 +452,6 @@ public async Task<IActionResult> Reset(string id)
return RedirectToAction(nameof(Index));
}

await _indexSettingsService.SetMappingsAsync(settings);
await _indexSettingsService.ResetAsync(settings);
await _indexSettingsService.UpdateAsync(settings);
await _indexSettingsService.SynchronizeAsync(settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ public override async Task<IDisplayResult> UpdateAsync(AzureAISearchIndexSetting
}

settings.IndexName = model.IndexName;
settings.IndexFullName = _indexManager.GetFullIndexName(model.IndexName);
}

settings.AnalyzerName = model.AnalyzerName;
Expand Down
13 changes: 13 additions & 0 deletions src/OrchardCore.Modules/OrchardCore.Search.AzureAI/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
using OrchardCore.DisplayManagement.Handlers;
using OrchardCore.Modules;
using OrchardCore.Navigation;
using OrchardCore.Recipes;
using OrchardCore.Search.Abstractions;
using OrchardCore.Search.AzureAI.Deployment;
using OrchardCore.Search.AzureAI.Drivers;
using OrchardCore.Search.AzureAI.Handlers;
using OrchardCore.Search.AzureAI.Migrations;
using OrchardCore.Search.AzureAI.Models;
using OrchardCore.Search.AzureAI.Recipes;
using OrchardCore.Search.AzureAI.Services;

namespace OrchardCore.Search.AzureAI;
Expand All @@ -32,6 +34,17 @@ public override void ConfigureServices(IServiceCollection services)
}
}

[RequireFeatures("OrchardCore.Recipes.Core")]
public sealed class RecipeStartup : StartupBase
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddRecipeExecutionStep<AzureAISearchIndexRebuildStep>();
services.AddRecipeExecutionStep<AzureAISearchIndexResetStep>();
services.AddRecipeExecutionStep<AzureAISearchIndexSettingsStep>();
}
}

[RequireFeatures("OrchardCore.Search")]
public sealed class SearchStartup : StartupBase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using OrchardCore.ContentManagement.Handlers;
using OrchardCore.Recipes;
using OrchardCore.Search.AzureAI.Handlers;
using OrchardCore.Search.AzureAI.Models;
using OrchardCore.Search.AzureAI.Recipes;
using OrchardCore.Search.AzureAI.Services;
using OrchardCore.Security.Permissions;

Expand All @@ -25,10 +23,7 @@ public static IServiceCollection AddAzureAISearchServices(this IServiceCollectio
services.AddScoped<IAzureAISearchFieldIndexEvents, DefaultAzureAISearchFieldIndexEvents>();
services.AddScoped<AzureAISearchIndexSettingsService>();
services.AddSingleton<AzureAIClientFactory>();

services.AddRecipeExecutionStep<AzureAISearchIndexRebuildStep>();
services.AddRecipeExecutionStep<AzureAISearchIndexResetStep>();
services.AddRecipeExecutionStep<AzureAISearchIndexSettingsStep>();
services.AddSingleton<AzureAISearchIndexNameService>();

return services;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,25 @@ namespace OrchardCore.Search.AzureAI.Handlers;

public sealed class AzureAISearchIndexHandler : AzureAISearchIndexSettingsHandlerBase
{
private readonly AzureAISearchIndexNameService _searchIndexNameService;

private readonly IStringLocalizer S;

public AzureAISearchIndexHandler(IStringLocalizer<AzureAISearchIndexHandler> stringLocalizer)
public AzureAISearchIndexHandler(
AzureAISearchIndexNameService searchIndexNameService,
IStringLocalizer<AzureAISearchIndexHandler> stringLocalizer)
{
_searchIndexNameService = searchIndexNameService;
S = stringLocalizer;
}

public override Task CreatingAsync(AzureAISearchIndexSettingsCreateContext context)
{
context.Settings.IndexFullName = _searchIndexNameService.GetFullIndexName(context.Settings.IndexName);

return Task.CompletedTask;
}

public override Task InitializingAsync(AzureAISearchIndexSettingsInitializingContext context)
=> PopulateAsync(context.Settings, context.Data);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,18 @@ public ContentAzureAISearchIndexHandler(
S = stringLocalizer;
}

public override Task CreatingAsync(AzureAISearchIndexSettingsCreateContext context)
=> SetMappingAsync(context.Settings);

public override Task UpdatingAsync(AzureAISearchIndexSettingsUpdateContext context)
=> SetMappingAsync(context.Settings);

public override Task InitializingAsync(AzureAISearchIndexSettingsInitializingContext context)
=> PopulateAsync(context.Settings, context.Data);

private static Task PopulateAsync(AzureAISearchIndexSettings settings, JsonNode data)
{
if (!string.Equals(AzureAISearchConstants.ContentsIndexSource, settings.Source, StringComparison.OrdinalIgnoreCase))
if (!CanHandle(settings))
{
return Task.CompletedTask;
}
Expand Down Expand Up @@ -90,7 +96,7 @@ private static Task PopulateAsync(AzureAISearchIndexSettings settings, JsonNode

public override Task ValidatingAsync(AzureAISearchIndexSettingsValidatingContext context)
{
if (!string.Equals(AzureAISearchConstants.ContentsIndexSource, context.Settings.Source, StringComparison.OrdinalIgnoreCase))
if (!CanHandle(context.Settings))
{
return Task.CompletedTask;
}
Expand Down Expand Up @@ -119,7 +125,7 @@ public override Task ResetAsync(AzureAISearchIndexSettingsResetContext context)

public override Task SynchronizedAsync(AzureAISearchIndexSettingsSynchronizedContext context)
{
if (!string.Equals(AzureAISearchConstants.ContentsIndexSource, context.Settings.Source, StringComparison.OrdinalIgnoreCase))
if (!CanHandle(context.Settings))
{
return Task.CompletedTask;
}
Expand All @@ -133,7 +139,7 @@ public override Task SynchronizedAsync(AzureAISearchIndexSettingsSynchronizedCon

public override Task ExportingAsync(AzureAISearchIndexSettingsExportingContext context)
{
if (!string.Equals(AzureAISearchConstants.ContentsIndexSource, context.Settings.Source, StringComparison.OrdinalIgnoreCase))
if (!CanHandle(context.Settings))
{
return Task.CompletedTask;
}
Expand All @@ -155,13 +161,14 @@ public override Task ExportingAsync(AzureAISearchIndexSettingsExportingContext c
return Task.CompletedTask;
}

public override async Task MappingAsync(AzureAISearchMappingContext context)
private async Task SetMappingAsync(AzureAISearchIndexSettings settings)
{
if (!string.Equals(AzureAISearchConstants.ContentsIndexSource, context.Settings.Source, StringComparison.OrdinalIgnoreCase))
if (!CanHandle(settings))
{
return;
}
var metadata = context.Settings.As<ContentIndexMetadata>();

var metadata = settings.As<ContentIndexMetadata>();

foreach (var contentType in metadata.IndexedContentTypes ?? [])
{
Expand All @@ -170,8 +177,8 @@ public override async Task MappingAsync(AzureAISearchMappingContext context)
var buildIndexContext = new BuildIndexContext(index, contentItem, [contentType], new AzureAISearchContentIndexSettings());
await _contentItemIndexHandlers.InvokeAsync(x => x.BuildIndexAsync(buildIndexContext), _logger);

await AddIndexMappingAsync(context.Settings.IndexMappings, IndexingConstants.ContentItemIdKey, new DocumentIndexEntry(IndexingConstants.ContentItemIdKey, contentItem.ContentItemId, Types.Text, DocumentIndexOptions.Keyword), context.Settings);
await AddIndexMappingAsync(context.Settings.IndexMappings, IndexingConstants.ContentItemVersionIdKey, new DocumentIndexEntry(IndexingConstants.ContentItemVersionIdKey, contentItem.ContentItemId, Types.Text, DocumentIndexOptions.Keyword), context.Settings);
await AddIndexMappingAsync(settings.IndexMappings, IndexingConstants.ContentItemIdKey, new DocumentIndexEntry(IndexingConstants.ContentItemIdKey, contentItem.ContentItemId, Types.Text, DocumentIndexOptions.Keyword), settings);
await AddIndexMappingAsync(settings.IndexMappings, IndexingConstants.ContentItemVersionIdKey, new DocumentIndexEntry(IndexingConstants.ContentItemVersionIdKey, contentItem.ContentItemId, Types.Text, DocumentIndexOptions.Keyword), settings);

foreach (var entry in index.Entries)
{
Expand All @@ -180,11 +187,16 @@ public override async Task MappingAsync(AzureAISearchMappingContext context)
continue;
}

await AddIndexMappingAsync(context.Settings.IndexMappings, safeFieldName, entry, context.Settings);
await AddIndexMappingAsync(settings.IndexMappings, safeFieldName, entry, settings);
}
}
}

private static bool CanHandle(AzureAISearchIndexSettings settings)
{
return string.Equals(AzureAISearchConstants.ContentsIndexSource, settings.Source, StringComparison.OrdinalIgnoreCase);
}

private async Task AddIndexMappingAsync(IList<AzureAISearchIndexMap> indexMappings, string safeFieldName, DocumentIndexEntry entry, AzureAISearchIndexSettings settings)
{
var indexMap = new AzureAISearchIndexMap(safeFieldName, entry.Type, entry.Options)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@ public interface IAzureAISearchIndexSettingsHandler
{
Task InitializingAsync(AzureAISearchIndexSettingsInitializingContext context);

Task UpdatedAsync(AzureAISearchIndexSettingsUpdatedContext context);
Task CreatingAsync(AzureAISearchIndexSettingsCreateContext context);

Task ValidatingAsync(AzureAISearchIndexSettingsValidatingContext context);
Task CreatedAsync(AzureAISearchIndexSettingsCreateContext context);

Task UpdatingAsync(AzureAISearchIndexSettingsUpdateContext context);

Task MappingAsync(AzureAISearchMappingContext context);
Task UpdatedAsync(AzureAISearchIndexSettingsUpdateContext context);

Task ValidatingAsync(AzureAISearchIndexSettingsValidatingContext context);

Task ResetAsync(AzureAISearchIndexSettingsResetContext context);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@ public class AzureAISearchIndexCreateContext
{
public AzureAISearchIndexSettings Settings { get; }

public string IndexFullName { get; }

public AzureAISearchIndexCreateContext(AzureAISearchIndexSettings settings, string indexFullName)
public AzureAISearchIndexCreateContext(AzureAISearchIndexSettings settings)
{
ArgumentNullException.ThrowIfNull(settings);

Settings = settings;
IndexFullName = indexFullName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@ public class AzureAISearchIndexRebuildContext
{
public AzureAISearchIndexSettings Settings { get; }

public string IndexFullName { get; }

public AzureAISearchIndexRebuildContext(AzureAISearchIndexSettings settings, string indexFullName)
public AzureAISearchIndexRebuildContext(AzureAISearchIndexSettings settings)
{
ArgumentNullException.ThrowIfNull(settings);

Settings = settings;
IndexFullName = indexFullName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class AzureAISearchIndexSettings : Entity

public string QueryAnalyzerName { get; set; }

public IList<AzureAISearchIndexMap> IndexMappings { get; set; }
public IList<AzureAISearchIndexMap> IndexMappings { get; init; } = [];

private long _lastTaskId;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace OrchardCore.Search.AzureAI.Models;

public class AzureAISearchIndexSettingsCreateContext
{
public AzureAISearchIndexSettings Settings { get; }

public AzureAISearchIndexSettingsCreateContext(AzureAISearchIndexSettings settings)
{
ArgumentNullException.ThrowIfNull(settings);

Settings = settings;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace OrchardCore.Search.AzureAI.Models;

public class AzureAISearchIndexSettingsUpdateContext
{
public AzureAISearchIndexSettings Settings { get; }

public AzureAISearchIndexSettingsUpdateContext(AzureAISearchIndexSettings settings)
{
ArgumentNullException.ThrowIfNull(settings);

Settings = settings;
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ await HttpBackgroundJob.ExecuteAfterEndOfRequestAsync(AzureAISearchIndexRebuildD

foreach (var settings in indexSettings)
{
await indexSettingsService.SetMappingsAsync(settings);
await indexSettingsService.ResetAsync(settings);
await indexSettingsService.UpdateAsync(settings);
await indexManager.RebuildAsync(settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,10 @@ await HttpBackgroundJob.ExecuteAfterEndOfRequestAsync(AzureAISearchIndexRebuildD

foreach (var settings in indexSettings)
{
await indexSettingsService.SetMappingsAsync(settings);
await indexSettingsService.ResetAsync(settings);
await indexSettingsService.UpdateAsync(settings);
if (!await indexManager.ExistsAsync(settings.IndexName))
{
settings.IndexFullName = indexManager.GetFullIndexName(settings.IndexName);

await indexManager.CreateAsync(settings);
}

Expand Down
Loading

0 comments on commit 2b129dd

Please sign in to comment.