diff --git a/src/Sitko.Core.Search.OpenSearch/OpenSearchSearcher.cs b/src/Sitko.Core.Search.OpenSearch/OpenSearchSearcher.cs index a9f944db..fc8b416f 100644 --- a/src/Sitko.Core.Search.OpenSearch/OpenSearchSearcher.cs +++ b/src/Sitko.Core.Search.OpenSearch/OpenSearchSearcher.cs @@ -104,29 +104,22 @@ public async Task SearchAsync(string indexName, string term, int { indexName = $"{Options.Prefix}_{indexName}"; var searchResponse = await GetClient() - .SearchAsync(x => GetSearchRequest(x, indexName, term, searchType, limit), cancellationToken); + .SearchAsync(x => GetSearchRequest(x, indexName, term, searchType, limit, withHighlight), + cancellationToken); if (searchResponse.ServerError != null) { logger.LogError("Error while searching in {IndexName}: {ErrorText}", indexName, searchResponse.ServerError); } var result = searchResponse.Hits.Select(h => + new TSearchModel { - var searchModel = new TSearchModel - { - Id = h.Source.Id, - Content = h.Source.Content, - Date = h.Source.Date, - Title = h.Source.Title, - Url = h.Source.Url - }; - - if (withHighlight) - { - searchModel.Highlight = h.Highlight; - } - - return searchModel; + Id = h.Source.Id, + Content = h.Source.Content, + Date = h.Source.Date, + Title = h.Source.Title, + Url = h.Source.Url, + Highlight = h.Highlight } ).ToArray(); return result; @@ -261,7 +254,7 @@ private static string GetSearchText(string? term) } private SearchDescriptor GetSearchRequest(SearchDescriptor descriptor, - string indexName, string term, SearchType searchType, int limit = 0) + string indexName, string term, SearchType searchType, int limit = 0, bool withHighlight = false) { var names = GetSearchText(term); switch (searchType) @@ -279,13 +272,16 @@ private SearchDescriptor GetSearchRequest(SearchDescriptor + if (withHighlight) + { + descriptor.Highlight(h => h.Fields(fs => fs .Field(p => p.Title) .PreTags(Options.PreTags) - .PostTags(Options.PostTags)) - ) + .PostTags(Options.PostTags))); + } + + return descriptor .Sort(s => s.Descending(SortSpecialField.Score).Descending(model => model.Date)) .Size(limit > 0 ? limit : 20) .Index(indexName.ToLowerInvariant());