diff --git a/backend/extensions/Squidex.Extensions/Text/Azure/AzureTextIndex.cs b/backend/extensions/Squidex.Extensions/Text/Azure/AzureTextIndex.cs index d3f7f55f7..b8ec78968 100644 --- a/backend/extensions/Squidex.Extensions/Text/Azure/AzureTextIndex.cs +++ b/backend/extensions/Squidex.Extensions/Text/Azure/AzureTextIndex.cs @@ -67,7 +67,7 @@ public sealed class AzureTextIndex : IInitializable, ITextIndex return; } - await searchClient.IndexDocumentsAsync(batch, cancellationToken: ct); + var x = await searchClient.IndexDocumentsAsync(batch, cancellationToken: ct); } public async Task?> SearchAsync(App app, GeoQuery query, SearchScope scope, diff --git a/backend/extensions/Squidex.Extensions/Text/Azure/CommandFactory.cs b/backend/extensions/Squidex.Extensions/Text/Azure/CommandFactory.cs index 431f89a58..776108e42 100644 --- a/backend/extensions/Squidex.Extensions/Text/Azure/CommandFactory.cs +++ b/backend/extensions/Squidex.Extensions/Text/Azure/CommandFactory.cs @@ -32,58 +32,72 @@ public static class CommandFactory private static void UpsertTextEntry(UpsertIndexEntry upsert, IList> batch) { - var geoField = string.Empty; - var geoObject = (object?)null; - if (upsert.GeoObjects != null) { foreach (var (key, value) in upsert.GeoObjects) { - if (value is Point point) + if (value is not Point point) { - geoField = key; - geoObject = new - { - type = "Point", - coordinates = new[] - { - point.Coordinate.X, - point.Coordinate.Y, - }, - }; - break; + continue; } + + var geoField = key; + var geoObject = new + { + type = "Point", + coordinates = new[] + { + point.Coordinate.X, + point.Coordinate.Y, + }, + }; + + var geoDocument = new SearchDocument + { + ["docId"] = upsert.ToDocId(), + ["appId"] = upsert.UniqueContentId.AppId.ToString(), + ["appName"] = string.Empty, + ["contentId"] = upsert.UniqueContentId.ContentId.ToString(), + ["schemaId"] = upsert.SchemaId.Id.ToString(), + ["schemaName"] = upsert.SchemaId.Name, + ["serveAll"] = upsert.ServeAll, + ["servePublished"] = upsert.ServePublished, + ["geoField"] = geoField, + ["geoObject"] = geoObject, + }; + + batch.Add(IndexDocumentsAction.MergeOrUpload(geoDocument)); } } - if (upsert.Texts != null && geoObject != null) + if (upsert.Texts is { Count: > 0 }) { var document = new SearchDocument { ["docId"] = upsert.ToDocId(), ["appId"] = upsert.UniqueContentId.AppId.ToString(), ["appName"] = string.Empty, - ["contentId"] = upsert.UniqueContentId.ToString(), + ["contentId"] = upsert.UniqueContentId.ContentId.ToString(), ["schemaId"] = upsert.SchemaId.Id.ToString(), ["schemaName"] = upsert.SchemaId.Name, ["serveAll"] = upsert.ServeAll, ["servePublished"] = upsert.ServePublished, - ["geoField"] = geoField, - ["geoObject"] = geoObject, }; foreach (var (key, value) in upsert.Texts) { - var text = value; - - var languageCode = AzureIndexDefinition.GetFieldName(key); + var textMerged = value; + var textLanguage = AzureIndexDefinition.GetFieldName(key); - if (document.TryGetValue(languageCode, out var existing)) + if (document.TryGetValue(textLanguage, out var existing)) { - text = $"{existing} {value}"; + textMerged = $"{existing} {value}"; } - document[languageCode] = text; + if (!string.IsNullOrWhiteSpace(textMerged)) + { + document[textLanguage] = textMerged; + } } batch.Add(IndexDocumentsAction.MergeOrUpload(document)); diff --git a/backend/extensions/Squidex.Extensions/Text/ElasticSearch/CommandFactory.cs b/backend/extensions/Squidex.Extensions/Text/ElasticSearch/CommandFactory.cs index ff72d520e..e0acb14c4 100644 --- a/backend/extensions/Squidex.Extensions/Text/ElasticSearch/CommandFactory.cs +++ b/backend/extensions/Squidex.Extensions/Text/ElasticSearch/CommandFactory.cs @@ -30,57 +30,78 @@ public static class CommandFactory private static void UpsertEntry(UpsertIndexEntry upsert, List args, string indexName) { - var geoField = string.Empty; - var geoObject = (object?)null; + var hasAddedDeletion = false; - if (upsert.GeoObjects != null) + void AddArgs(object arg) { - foreach (var (key, value) in upsert.GeoObjects) + if (!hasAddedDeletion) { - if (value is Point point) + args.Add(new { - geoField = key; - geoObject = new + index = new { - lat = point.Coordinate.X, - lon = point.Coordinate.Y, - }; - break; - } + _id = upsert.ToDocId(), + _index = indexName, + }, + }); } + + args.Add(arg); + hasAddedDeletion = true; } - if (upsert.Texts != null || geoObject != null) + if (upsert.GeoObjects != null) { - args.Add(new + foreach (var (key, value) in upsert.GeoObjects) { - index = new + if (value is not Point point) { - _id = upsert.ToDocId(), - _index = indexName, - }, - }); + continue; + } - var texts = new Dictionary(); + var geoField = key; + var geoObject = new + { + lat = point.Coordinate.X, + lon = point.Coordinate.Y, + }; - if (upsert.Texts != null) - { - foreach (var (key, value) in upsert.Texts) + AddArgs(new { - var text = value; + appId = upsert.UniqueContentId.AppId.ToString(), + appName = string.Empty, + contentId = upsert.UniqueContentId.ContentId.ToString(), + schemaId = upsert.SchemaId.Id.ToString(), + schemaName = upsert.SchemaId.Name, + serveAll = upsert.ServeAll, + servePublished = upsert.ServePublished, + geoField, + geoObject, + }); + } + } - var languageCode = ElasticSearchIndexDefinition.GetFieldName(key); + if (upsert.Texts is { Count: > 0 }) + { + var texts = new Dictionary(); - if (texts.TryGetValue(languageCode, out var existing)) - { - text = $"{existing} {value}"; - } + foreach (var (key, value) in upsert.Texts) + { + var textMerged = value; + var textLanguage = ElasticSearchIndexDefinition.GetFieldName(key); - texts[languageCode] = text; + if (texts.TryGetValue(textLanguage, out var existing)) + { + textMerged = $"{existing} {value}"; + } + + if (!string.IsNullOrWhiteSpace(textMerged)) + { + texts[textLanguage] = textMerged; } } - args.Add(new + AddArgs(new { appId = upsert.UniqueContentId.AppId.ToString(), appName = string.Empty, @@ -90,8 +111,6 @@ public static class CommandFactory serveAll = upsert.ServeAll, servePublished = upsert.ServePublished, texts, - geoField, - geoObject, }); } } diff --git a/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj b/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj index 0fcf4bca9..a54bd62d7 100644 --- a/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj +++ b/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj @@ -35,13 +35,13 @@ - - - + + + - - - + + + diff --git a/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj b/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj index 857874561..6d45454fb 100644 --- a/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj +++ b/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj @@ -24,11 +24,11 @@ - - - - - + + + + + diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj b/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj index 1000eacb2..f7c0d0933 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj @@ -28,8 +28,8 @@ - - + + diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexingProcess.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexingProcess.cs index 26e23f8e1..d39d5304a 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexingProcess.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexingProcess.cs @@ -331,16 +331,15 @@ public sealed class TextIndexingProcess( public async Task On(IEnumerable> events) { - var states = await QueryStatesAsync(events); - - var updates = new Updates(states, serializer); + var textStates = await QueryStatesAsync(events); + var textBatch = new Updates(textStates, serializer); foreach (var @event in events) { - updates.On(@event); + textBatch.On(@event); } - await updates.WriteAsync(textIndex, textIndexerState); + await textBatch.WriteAsync(textIndex, textIndexerState); } private Task> QueryStatesAsync(IEnumerable> events) diff --git a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index 45bdf0b05..eddb9e72d 100644 --- a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -24,13 +24,13 @@ - - - - - - - + + + + + + + diff --git a/backend/src/Squidex/Squidex.csproj b/backend/src/Squidex/Squidex.csproj index a61d8d65d..0e56d62be 100644 --- a/backend/src/Squidex/Squidex.csproj +++ b/backend/src/Squidex/Squidex.csproj @@ -62,18 +62,18 @@ - - - - - - - + + + + + + + - - - - + + + +