Skip to content

Commit d9ea055

Browse files
committed
TD-4870 : Implemented Did you Mean Feature for Search Search enhancements
1 parent 5852223 commit d9ea055

File tree

20 files changed

+61
-16
lines changed

20 files changed

+61
-16
lines changed

AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
<PackageReference Include="HtmlSanitizer" Version="6.0.453" />
9090
<PackageReference Include="IdentityModel" Version="4.4.0" />
9191
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.2" />
92-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.40" />
92+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.41" />
9393
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
9494
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.0" />
9595
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />

LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
<PackageReference Include="HtmlAgilityPack" Version="1.11.38" />
109109
<PackageReference Include="IdentityModel" Version="4.3.0" />
110110
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
111-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.40" />
111+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.41" />
112112
<PackageReference Include="linqtotwitter" Version="6.9.0" />
113113
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
114114
<PackageReference Include="Microsoft.ApplicationInsights.EventCounterCollector" Version="2.21.0" />

LearningHub.Nhs.WebUI/Models/Search/SearchResultViewModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,10 @@ public class SearchResultViewModel
7878
/// Gets or sets the catalogue result paging.
7979
/// </summary>
8080
public PagingViewModel CatalogueResultPaging { get; set; }
81+
82+
/// <summary>
83+
/// Gets or sets a value indicating whether Did You Mean Enabled or not.
84+
/// </summary>
85+
public bool DidYouMeanEnabled { get; set; }
8186
}
8287
}

LearningHub.Nhs.WebUI/Services/SearchService.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace LearningHub.Nhs.WebUI.Services
66
using System.Net.Http;
77
using System.Security.Principal;
88
using System.Text;
9+
using System.Text.RegularExpressions;
910
using System.Threading.Tasks;
1011
using System.Web;
1112
using HtmlAgilityPack;
@@ -61,6 +62,7 @@ public async Task<SearchResultViewModel> PerformSearch(IPrincipal user, SearchRe
6162
var searchSortItemList = SearchHelper.GetSearchSortList();
6263
var selectedSortItem = searchSortItemList.Where(x => x.SearchSortType == (SearchSortTypeEnum)searchSortType).FirstOrDefault();
6364
var groupId = Guid.Parse(searchRequest.GroupId);
65+
bool didYouMeanEnabled = false;
6466

6567
var resourceSearchPageSize = this.settings.FindwiseSettings.ResourceSearchPageSize;
6668
var catalogueSearchPageSize = this.settings.FindwiseSettings.CatalogueSearchPageSize;
@@ -112,6 +114,35 @@ public async Task<SearchResultViewModel> PerformSearch(IPrincipal user, SearchRe
112114

113115
resourceResult = resourceResultTask.Result;
114116
catalogueResult = catalogueResultTask.Result;
117+
118+
// Did you mean suggestion when no hits found
119+
if (resourceResult?.TotalHits == 0 && catalogueResult?.TotalHits == 0 && (resourceResult?.Spell?.Suggestions?.Count > 0 || catalogueResult?.Spell?.Suggestions?.Count > 0))
120+
{
121+
didYouMeanEnabled = true;
122+
123+
// pass the spell suggestion as new search text - resources
124+
if (resourceResult?.Spell?.Suggestions?.Count > 0)
125+
{
126+
resourceSearchRequestModel.SearchText = Regex.Replace(resourceResult?.Spell?.Suggestions?.FirstOrDefault().ToString(), "<.*?>", string.Empty);
127+
128+
// calling findwise endpoint with new search text - resources
129+
resourceResultTask = this.GetSearchResultAsync(resourceSearchRequestModel);
130+
}
131+
132+
// pass the spell suggestion as new search text - catalogues
133+
if (catalogueResult?.Spell?.Suggestions?.Count > 0)
134+
{
135+
catalogueSearchRequestModel.SearchText = Regex.Replace(catalogueResult?.Spell?.Suggestions?.FirstOrDefault().ToString(), "<.*?>", string.Empty);
136+
137+
// calling findwise endpoint with new search text - catalogues
138+
catalogueResultTask = this.GetCatalogueSearchResultAsync(catalogueSearchRequestModel);
139+
}
140+
141+
await Task.WhenAll(resourceResultTask, catalogueResultTask);
142+
143+
resourceResult = resourceResultTask.Result;
144+
catalogueResult = catalogueResultTask.Result;
145+
}
115146
}
116147

117148
var searchfilters = new List<SearchFilterModel>();
@@ -198,6 +229,7 @@ public async Task<SearchResultViewModel> PerformSearch(IPrincipal user, SearchRe
198229
PageSize = catalogueSearchPageSize,
199230
TotalItems = catalogueResult?.TotalHits ?? 0,
200231
},
232+
DidYouMeanEnabled = didYouMeanEnabled,
201233
};
202234

203235
return searchResultViewModel;

LearningHub.Nhs.WebUI/Views/Search/Index.cshtml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@
1313
<h1 class="nhsuk-u-margin-top-5 nhsuk-u-margin-bottom-6">
1414
Search results @(!string.IsNullOrEmpty(Model.SearchString) ? "for " + Model.SearchString : string.Empty)
1515
</h1>
16+
@if (Model.DidYouMeanEnabled)
17+
{
18+
<h6 class="nhsuk-u-margin-top-5 nhsuk-u-margin-bottom-6">
19+
We couldn't find a match for <em>@(Model.SearchString)</em>, try adjusting your search terms or explore the suggestions below.
20+
</h6>
21+
}
1622

1723
<div class="nhsuk-grid-row">
1824
<div class="nhsuk-grid-column-two-thirds">

WebAPI/LearningHub.Nhs.API/Controllers/SearchController.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ private async Task<SearchViewModel> GetSearchResults(SearchRequestModel searchRe
319319

320320
searchViewModel.Feedback = results.Feedback;
321321
searchViewModel.RelatedCatalogues = await this.catalogueService.GetCatalogues(catalogueIds);
322+
searchViewModel.Spell = results.Spell;
322323

323324
return searchViewModel;
324325
}
@@ -390,6 +391,7 @@ private async Task<SearchCatalogueViewModel> GetCatalogueSearchResults(Catalogue
390391

391392
searchViewModel.SearchId = catalogueSearchRequestModel.SearchId > 0 ? catalogueSearchRequestModel.SearchId : results.SearchId;
392393
searchViewModel.Feedback = results.Feedback;
394+
searchViewModel.Spell = results.Spell;
393395

394396
return searchViewModel;
395397
}

WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
2828
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
2929
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
30-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.40" />
30+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.41" />
3131
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
3232
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
3333
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />

WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
1111
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
12-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.40" />
12+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.41" />
1313
<PackageReference Update="StyleCop.Analyzers" Version="1.1.118">
1414
<PrivateAssets>all</PrivateAssets>
1515
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
1212
<PackageReference Include="FluentAssertions" Version="6.2.0" />
1313
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
14-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.40" />
14+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.41" />
1515
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
1616
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
1717
<PackageReference Include="Moq" Version="4.16.1" />

WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<ItemGroup>
1010
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
1111
<PackageReference Include="LearningHub.Nhs.Caching" Version="2.0.0" />
12-
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.40" />
12+
<PackageReference Include="LearningHub.Nhs.Models" Version="3.0.41" />
1313
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
1414
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0" />
1515
<PackageReference Update="StyleCop.Analyzers" Version="1.1.118">

0 commit comments

Comments
 (0)