From 938b053700cd8f5230f0ab124422a768f060cb22 Mon Sep 17 00:00:00 2001 From: Konstantin Savosteev Date: Mon, 23 Sep 2024 14:04:25 +0200 Subject: [PATCH 1/3] feat: add relevance score to Product/Category --- .../Model/CatalogProduct.cs | 5 ++++- src/VirtoCommerce.CatalogModule.Core/Model/Category.cs | 5 ++++- .../Model/ListEntry/CategoryListEntry.cs | 7 ++++++- .../Model/ListEntry/ProductListEntry.cs | 7 +++++-- .../VirtoCommerce.CatalogModule.Core.csproj | 2 +- .../Search/Indexing/CatalogIndexedSearchService.cs | 2 ++ src/VirtoCommerce.CatalogModule.Web/module.manifest | 2 +- 7 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/VirtoCommerce.CatalogModule.Core/Model/CatalogProduct.cs b/src/VirtoCommerce.CatalogModule.Core/Model/CatalogProduct.cs index f6adccba9..98be28a3e 100644 --- a/src/VirtoCommerce.CatalogModule.Core/Model/CatalogProduct.cs +++ b/src/VirtoCommerce.CatalogModule.Core/Model/CatalogProduct.cs @@ -9,10 +9,11 @@ using VirtoCommerce.CoreModule.Core.Seo; using VirtoCommerce.ExportModule.Core.Model; using VirtoCommerce.Platform.Core.Common; +using VirtoCommerce.SearchModule.Core.Model; namespace VirtoCommerce.CatalogModule.Core.Model { - public class CatalogProduct : AuditableEntity, IHasLinks, ISeoSupport, IHasOutlines, IHasDimension, IHasAssociations, IHasProperties, IHasImages, IHasAssets, IInheritable, IHasTaxType, IHasName, IHasOuterId, IExportable, ICopyable, IHasCategoryId, IHasExcludedProperties + public class CatalogProduct : AuditableEntity, IHasLinks, ISeoSupport, IHasOutlines, IHasDimension, IHasAssociations, IHasProperties, IHasImages, IHasAssets, IInheritable, IHasTaxType, IHasName, IHasOuterId, IExportable, ICopyable, IHasCategoryId, IHasExcludedProperties, IHasRelevanceScore { /// /// The type of product. Can be "Physical", "Digital", etc. @@ -447,6 +448,8 @@ public bool ParentCategoryIsActive } } + public double? RelevanceScore { get; set; } + public virtual object GetCopy() { var result = this.CloneTyped(); diff --git a/src/VirtoCommerce.CatalogModule.Core/Model/Category.cs b/src/VirtoCommerce.CatalogModule.Core/Model/Category.cs index b58310fc6..421ac4306 100644 --- a/src/VirtoCommerce.CatalogModule.Core/Model/Category.cs +++ b/src/VirtoCommerce.CatalogModule.Core/Model/Category.cs @@ -7,10 +7,11 @@ using VirtoCommerce.CoreModule.Core.Seo; using VirtoCommerce.ExportModule.Core.Model; using VirtoCommerce.Platform.Core.Common; +using VirtoCommerce.SearchModule.Core.Model; namespace VirtoCommerce.CatalogModule.Core.Model { - public class Category : AuditableEntity, IHasLinks, ISeoSupport, IHasOutlines, IHasImages, IHasProperties, IHasTaxType, IHasName, IHasOuterId, IExportable, IHasExcludedProperties + public class Category : AuditableEntity, IHasLinks, ISeoSupport, IHasOutlines, IHasImages, IHasProperties, IHasTaxType, IHasName, IHasOuterId, IExportable, IHasExcludedProperties, IHasRelevanceScore { public Category() { @@ -179,6 +180,8 @@ public bool ParentIsActive } } + public double? RelevanceScore { get; set; } + public virtual void Move(string catalogId, string categoryId) { CatalogId = catalogId; diff --git a/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/CategoryListEntry.cs b/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/CategoryListEntry.cs index 6b4635cfe..c1a501a91 100644 --- a/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/CategoryListEntry.cs +++ b/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/CategoryListEntry.cs @@ -1,15 +1,18 @@ using System.Linq; using VirtoCommerce.Platform.Core.Common; +using VirtoCommerce.SearchModule.Core.Model; namespace VirtoCommerce.CatalogModule.Core.Model.ListEntry { /// /// Category ListEntry record. /// - public class CategoryListEntry : ListEntryBase + public class CategoryListEntry : ListEntryBase, IHasRelevanceScore { public const string TypeName = "category"; + public double? RelevanceScore { get; set; } + public override ListEntryBase FromModel(AuditableEntity entity) { base.FromModel(entity); @@ -23,6 +26,7 @@ public override ListEntryBase FromModel(AuditableEntity entity) IsActive = category.IsActive; Links = category.Links; CatalogId = category.CatalogId; + RelevanceScore = category.RelevanceScore; if (!category.Outlines.IsNullOrEmpty()) { @@ -31,6 +35,7 @@ public override ListEntryBase FromModel(AuditableEntity entity) Path = category.Outlines.First().Items.Select(x => x.Name).ToList(); } } + return this; } } diff --git a/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/ProductListEntry.cs b/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/ProductListEntry.cs index 4329816b7..b6d5ec923 100644 --- a/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/ProductListEntry.cs +++ b/src/VirtoCommerce.CatalogModule.Core/Model/ListEntry/ProductListEntry.cs @@ -2,17 +2,19 @@ using System.Linq; using VirtoCommerce.CoreModule.Core.Outlines; using VirtoCommerce.Platform.Core.Common; +using VirtoCommerce.SearchModule.Core.Model; namespace VirtoCommerce.CatalogModule.Core.Model.ListEntry { /// /// Product ListEntry record. /// - public class ProductListEntry : ListEntryBase, IHasOutlines + public class ProductListEntry : ListEntryBase, IHasOutlines, IHasRelevanceScore { public const string TypeName = "product"; public string ProductType { get; set; } public IList Outlines { get; set; } + public double? RelevanceScore { get; set; } public override ListEntryBase FromModel(AuditableEntity entity) { @@ -28,6 +30,7 @@ public override ListEntryBase FromModel(AuditableEntity entity) ProductType = product.ProductType; Links = product.Links; CatalogId = product.CatalogId; + RelevanceScore = product.RelevanceScore; if (!product.Outlines.IsNullOrEmpty()) { @@ -36,8 +39,8 @@ public override ListEntryBase FromModel(AuditableEntity entity) Path = product.Outlines.FirstOrDefault().Items.Select(x => x.Name).ToList(); Outlines = product.Outlines; } - } + return this; } } diff --git a/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj b/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj index fda1c23ec..b7b7fdb02 100644 --- a/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj +++ b/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj @@ -19,6 +19,6 @@ - + \ No newline at end of file diff --git a/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs b/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs index 05b9077d2..47dd2d355 100644 --- a/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs +++ b/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs @@ -7,6 +7,7 @@ using VirtoCommerce.CatalogModule.Core.Model.Search; using VirtoCommerce.Platform.Core.Common; using VirtoCommerce.Platform.Core.Settings; +using VirtoCommerce.SearchModule.Core.Extensions; using VirtoCommerce.SearchModule.Core.Model; using VirtoCommerce.SearchModule.Core.Services; @@ -90,6 +91,7 @@ protected virtual async Task ConvertDocuments(IList doc // Preserve original sorting order result = documents.Select(doc => itemsMap[doc.Id.ToString()]).Where(x => x != null).ToArray(); + documents.SetRelevanceScore(result); } return result; diff --git a/src/VirtoCommerce.CatalogModule.Web/module.manifest b/src/VirtoCommerce.CatalogModule.Web/module.manifest index 20bb841a3..c01917d74 100644 --- a/src/VirtoCommerce.CatalogModule.Web/module.manifest +++ b/src/VirtoCommerce.CatalogModule.Web/module.manifest @@ -10,7 +10,7 @@ - + From 5223ca4158aed41280de0b622d82cfb584fda2a1 Mon Sep 17 00:00:00 2001 From: Konstantin Savosteev Date: Tue, 24 Sep 2024 18:00:56 +0200 Subject: [PATCH 2/3] fix: refactoring --- .../Indexing/CatalogIndexedSearchService.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs b/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs index 47dd2d355..eae465437 100644 --- a/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs +++ b/src/VirtoCommerce.CatalogModule.Data/Search/Indexing/CatalogIndexedSearchService.cs @@ -90,8 +90,20 @@ protected virtual async Task ConvertDocuments(IList doc ReduceSearchResults(itemsMap.Values.Where(v => v != null), criteria); // Preserve original sorting order - result = documents.Select(doc => itemsMap[doc.Id.ToString()]).Where(x => x != null).ToArray(); - documents.SetRelevanceScore(result); + result = documents + .Select(doc => + { + var item = itemsMap.TryGetValue(doc.Id, out var value) ? value : null; + + if (item is IHasRelevanceScore hasRelevanceScore) + { + hasRelevanceScore.RelevanceScore = doc.GetRelevanceScore(); + } + + return item; + }) + .Where(x => x != null) + .ToArray(); } return result; From f903d63cbda1df0bf3d2cbe4f2efc81cf9ff8fc1 Mon Sep 17 00:00:00 2001 From: Konstantin Savosteev Date: Fri, 27 Sep 2024 11:18:00 +0200 Subject: [PATCH 3/3] feat: update search dependency --- .../VirtoCommerce.CatalogModule.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj b/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj index b7b7fdb02..0e3d93fad 100644 --- a/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj +++ b/src/VirtoCommerce.CatalogModule.Core/VirtoCommerce.CatalogModule.Core.csproj @@ -19,6 +19,6 @@ - + \ No newline at end of file