diff --git a/Directory.Packages.props b/Directory.Packages.props
index b08adf805..d763730cd 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -26,6 +26,7 @@
+
diff --git a/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj b/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj
index a4ad652a2..e9392cb10 100644
--- a/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj
+++ b/src/api/Elastic.Documentation.Api.Core/Elastic.Documentation.Api.Core.csproj
@@ -10,6 +10,7 @@
+
diff --git a/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs b/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs
index 2c81517f6..49b23cb9f 100644
--- a/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs
+++ b/src/api/Elastic.Documentation.Api.Core/Search/SearchUsecase.cs
@@ -2,17 +2,14 @@
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
+using Microsoft.Extensions.Logging;
+
namespace Elastic.Documentation.Api.Core.Search;
-public class SearchUsecase(ISearchGateway searchGateway)
+public partial class SearchUsecase(ISearchGateway searchGateway, ILogger logger)
{
public async Task Search(SearchRequest request, Cancel ctx = default)
{
-
- // var validationResult = validator.Validate(request);
- // if (!validationResult.IsValid)
- // throw new ArgumentException(validationResult.Message);
-
var (totalHits, results) = await searchGateway.SearchAsync(
request.Query,
request.PageNumber,
@@ -20,15 +17,29 @@ public async Task Search(SearchRequest request, Cancel ctx = def
ctx
);
-
- return new SearchResponse
+ var response = new SearchResponse
{
Results = results,
TotalResults = totalHits,
PageNumber = request.PageNumber,
PageSize = request.PageSize,
};
+
+ LogSearchResults(
+ logger,
+ response.PageSize,
+ response.PageNumber,
+ request.Query,
+ new SearchResultsLogProperties(results.Select(i => i.Url).ToArray())
+ );
+
+ return response;
}
+
+ [LoggerMessage(Level = LogLevel.Information, Message = "Search completed with {PageSize} (page {PageNumber}) results for query '{SearchQuery}'")]
+ private static partial void LogSearchResults(ILogger logger, int pageSize, int pageNumber, string searchQuery, [LogProperties] SearchResultsLogProperties result);
+
+ private sealed record SearchResultsLogProperties(string[] Urls);
}
public record SearchRequest