Skip to content
This repository has been archived by the owner on Jul 9, 2021. It is now read-only.

Commit

Permalink
Merge pull request #115 from SkillsFundingAgency/FC-747-Include_Filte…
Browse files Browse the repository at this point in the history
…r_options_when_no_documents

Updates apprenticeship provider search to always include all aggregat…
  • Loading branch information
ramaswamy-battula committed Aug 23, 2019
2 parents 298558c + b97b279 commit 75396c1
Showing 1 changed file with 20 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,31 +89,45 @@ private SearchDescriptor<T> CreateProviderQuery<T>(Expression<Func<T, object>> s
.Must(NestedLocationsQuery<T>(location))))
.Sort(SortByDistanceFromGivenLocation<T>(location))
.Aggregations(GetProviderSearchAggregationsSelector<T>())
.PostFilter(pf => FilterByDeliveryModes(pf, deliveryModes?.Select(x => x.GetMemberDescription() ?? string.Empty)));
.PostFilter(pf => GeneratePostFilter(pf, deliveryModes?.Select(x => x.GetMemberDescription() ?? string.Empty), showNationalOnly));

return descriptor;
}

private static QueryContainer FilterByDeliveryModes<T>(QueryContainerDescriptor<T> descriptor, IEnumerable<string> deliveryModes)
private static QueryContainer GeneratePostFilter<T>(QueryContainerDescriptor<T> descriptor, IEnumerable<string> deliveryModes, bool showNationalOnly)
where T : class, IApprenticeshipProviderSearchResultsItem
{
if (deliveryModes == null || !deliveryModes.Any())
{
return descriptor;
}

if (showNationalOnly)
{
return descriptor.Bool(b => b
.Filter(
f => f
.Terms(t => t
.Field(x => x.DeliveryModesKeywords)
.Terms(deliveryModes)),
f => f
.Term(t => t
.Field(x => x.NationalProvider)
.Value(showNationalOnly))));
}

return descriptor
.Terms(t => t
.Field(x => x.DeliveryModesKeywords)
.Terms(deliveryModes));
.Terms(t => t
.Field(x => x.DeliveryModesKeywords)
.Terms(deliveryModes));
}

private Func<AggregationContainerDescriptor<T>, IAggregationContainer> GetProviderSearchAggregationsSelector<T>()
where T : class, IApprenticeshipProviderSearchResultsItem
{
return aggs => aggs
.Terms(TrainingTypeAggregateName, tt => tt.Field(fi => fi.DeliveryModesKeywords).MinimumDocumentCount(0))
.Terms(NationalProviderAggregateName, tt => tt.Field(fi => fi.NationalProvider));
.Terms(NationalProviderAggregateName, tt => tt.Field(fi => fi.NationalProvider).MinimumDocumentCount(0));
}

private static IEnumerable<Func<QueryContainerDescriptor<T>, QueryContainer>> GenerateFilters<T>(Expression<Func<T, object>> selector, string apprenticeshipIdentifier, bool showForNonLevyOnly, bool showNationalOnly, List<DeliveryMode> deliveryModes)
Expand All @@ -122,11 +136,6 @@ private static QueryContainer FilterByDeliveryModes<T>(QueryContainerDescriptor<
yield return f => f.Term(t => t.Field(selector).Value(apprenticeshipIdentifier));

yield return f => f.Term(t => t.Field(fi => fi.HasNonLevyContract).Value(showForNonLevyOnly));

if (showNationalOnly)
{
yield return f => f.Term(t => t.Field(fi => fi.NationalProvider).Value(showNationalOnly));
}
}

private Func<QueryContainerDescriptor<T>, QueryContainer> NestedLocationsQuery<T>(Coordinate location)
Expand Down

0 comments on commit 75396c1

Please sign in to comment.