DS-3489: Add support for facet prefix

This commit is contained in:
Tom Desair
2018-06-29 16:24:17 +02:00
parent b805baddf5
commit 4d0382766c
7 changed files with 40 additions and 27 deletions

View File

@@ -171,6 +171,7 @@ public class DiscoveryRestController implements InitializingBean {
@RequestMapping(method = RequestMethod.GET, value = "/facets/{name}") @RequestMapping(method = RequestMethod.GET, value = "/facets/{name}")
public ResourceSupport getFacetValues(@PathVariable("name") String facetName, public ResourceSupport getFacetValues(@PathVariable("name") String facetName,
@RequestParam(name = "prefix", required = false) String prefix,
@RequestParam(name = "query", required = false) String query, @RequestParam(name = "query", required = false) String query,
@RequestParam(name = "dsoType", required = false) String dsoType, @RequestParam(name = "dsoType", required = false) String dsoType,
@RequestParam(name = "scope", required = false) String dsoScope, @RequestParam(name = "scope", required = false) String dsoScope,
@@ -179,13 +180,14 @@ public class DiscoveryRestController implements InitializingBean {
if (log.isTraceEnabled()) { if (log.isTraceEnabled()) {
log.trace("Facetting on facet " + facetName + " with scope: " + StringUtils.trimToEmpty(dsoScope) log.trace("Facetting on facet " + facetName + " with scope: " + StringUtils.trimToEmpty(dsoScope)
+ ", dsoType: " + StringUtils.trimToEmpty(dsoType) + ", dsoType: " + StringUtils.trimToEmpty(dsoType)
+ ", prefix: " + StringUtils.trimToEmpty(prefix)
+ ", query: " + StringUtils.trimToEmpty(dsoType) + ", query: " + StringUtils.trimToEmpty(dsoType)
+ ", filters: " + Objects.toString(searchFilters) + ", filters: " + Objects.toString(searchFilters)
+ ", page: " + Objects.toString(page)); + ", page: " + Objects.toString(page));
} }
FacetResultsRest facetResultsRest = discoveryRestRepository FacetResultsRest facetResultsRest = discoveryRestRepository
.getFacetObjects(facetName, query, dsoType, dsoScope, searchFilters, page); .getFacetObjects(facetName, prefix, query, dsoType, dsoScope, searchFilters, page);
FacetResultsResource facetResultsResource = new FacetResultsResource(facetResultsRest); FacetResultsResource facetResultsResource = new FacetResultsResource(facetResultsRest);

View File

@@ -30,13 +30,13 @@ public class DiscoverFacetResultsConverter {
private DiscoverFacetValueConverter facetValueConverter = new DiscoverFacetValueConverter(); private DiscoverFacetValueConverter facetValueConverter = new DiscoverFacetValueConverter();
public FacetResultsRest convert(Context context, String facetName, String query, String dsoType, String dsoScope, public FacetResultsRest convert(Context context, String facetName, String prefix, String query, String dsoType,
List<SearchFilter> searchFilters, DiscoverResult searchResult, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult,
DiscoveryConfiguration configuration, Pageable page) { DiscoveryConfiguration configuration, Pageable page) {
FacetResultsRest facetResultsRest = new FacetResultsRest(); FacetResultsRest facetResultsRest = new FacetResultsRest();
setRequestInformation(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, setRequestInformation(context, facetName, prefix, query, dsoType, dsoScope, searchFilters, searchResult,
facetResultsRest, page); configuration, facetResultsRest, page);
addToFacetResultList(facetName, searchResult, facetResultsRest, configuration, page); addToFacetResultList(facetName, searchResult, facetResultsRest, configuration, page);
@@ -65,11 +65,12 @@ public class DiscoverFacetResultsConverter {
return facetValueConverter.convert(value); return facetValueConverter.convert(value);
} }
private void setRequestInformation(Context context, String facetName, String query, String dsoType, String dsoScope, private void setRequestInformation(Context context, String facetName, String prefix, String query, String dsoType,
List<SearchFilter> searchFilters, DiscoverResult searchResult, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult,
DiscoveryConfiguration configuration, FacetResultsRest facetResultsRest, DiscoveryConfiguration configuration, FacetResultsRest facetResultsRest,
Pageable page) { Pageable page) {
facetResultsRest.setQuery(query); facetResultsRest.setQuery(query);
facetResultsRest.setPrefix(prefix);
facetResultsRest.setScope(dsoScope); facetResultsRest.setScope(dsoScope);
facetResultsRest.setDsoType(dsoType); facetResultsRest.setDsoType(dsoType);

View File

@@ -33,12 +33,12 @@ public abstract class DiscoveryRestHalLinkFactory<T> extends HalLinkFactory<T, D
} }
} }
protected UriComponentsBuilder buildFacetBaseLink(final FacetResultsRest data) { protected UriComponentsBuilder buildFacetBaseLink(final FacetResultsRest data) throws Exception {
try { UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn()
UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn() .getFacetValues(data.getFacetEntry().getName(),
.getFacetValues(data.getFacetEntry().getName(), data.getPrefix(), data.getQuery(),
data.getQuery(), data.getDsoType(), data.getDsoType(), data.getScope(),
data.getScope(), null, null)); null, null));
return addFilterParams(uriBuilder, data); return addFilterParams(uriBuilder, data);
} catch (Exception ex) { } catch (Exception ex) {

View File

@@ -42,8 +42,8 @@ public class SearchFacetEntryHalLinkFactory extends DiscoveryRestHalLinkFactory<
String scope = searchData == null ? null : searchData.getScope(); String scope = searchData == null ? null : searchData.getScope();
UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn() UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn()
.getFacetValues(facetData.getName(), query, dsoType, scope, .getFacetValues(facetData.getName(), null, query, dsoType,
null, null)); scope, null, null));
addFilterParams(uriBuilder, searchData); addFilterParams(uriBuilder, searchData);

View File

@@ -20,6 +20,8 @@ public class FacetResultsRest extends DiscoveryResultsRest {
@JsonUnwrapped @JsonUnwrapped
private SearchFacetEntryRest facetEntry; private SearchFacetEntryRest facetEntry;
private String prefix;
public void addToFacetResultList(SearchFacetValueRest facetResult) { public void addToFacetResultList(SearchFacetValueRest facetResult) {
facetEntry.addValue(facetResult); facetEntry.addValue(facetResult);
} }
@@ -33,7 +35,15 @@ public class FacetResultsRest extends DiscoveryResultsRest {
return facetEntry; return facetEntry;
} }
public void setFacetEntry(final SearchFacetEntryRest facetEntry) { public void setFacetEntry(SearchFacetEntryRest facetEntry) {
this.facetEntry = facetEntry; this.facetEntry = facetEntry;
} }
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getPrefix() {
return prefix;
}
} }

View File

@@ -129,7 +129,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
return discoverSearchSupportConverter.convert(); return discoverSearchSupportConverter.convert();
} }
public FacetResultsRest getFacetObjects(String facetName, String query, String dsoType, String dsoScope, public FacetResultsRest getFacetObjects(String facetName, String prefix, String query, String dsoType, String dsoScope,
List<SearchFilter> searchFilters, Pageable page) List<SearchFilter> searchFilters, Pageable page)
throws InvalidRequestException { throws InvalidRequestException {
@@ -143,7 +143,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
DiscoverQuery discoverQuery = null; DiscoverQuery discoverQuery = null;
try { try {
discoverQuery = queryBuilder discoverQuery = queryBuilder
.buildFacetQuery(context, scopeObject, configuration, query, searchFilters, dsoType, page, facetName); .buildFacetQuery(context, scopeObject, configuration, prefix, query, searchFilters, dsoType, page, facetName);
searchResult = searchService.search(context, scopeObject, discoverQuery); searchResult = searchService.search(context, scopeObject, discoverQuery);
} catch (SearchServiceException e) { } catch (SearchServiceException e) {
@@ -152,7 +152,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
} }
FacetResultsRest facetResultsRest = discoverFacetResultsConverter FacetResultsRest facetResultsRest = discoverFacetResultsConverter
.convert(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, page); .convert(context, facetName, prefix, query, dsoType, dsoScope, searchFilters, searchResult, configuration, page);
return facetResultsRest; return facetResultsRest;
} }

View File

@@ -101,7 +101,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
public DiscoverQuery buildFacetQuery(Context context, DSpaceObject scope, public DiscoverQuery buildFacetQuery(Context context, DSpaceObject scope,
DiscoveryConfiguration discoveryConfiguration, DiscoveryConfiguration discoveryConfiguration,
String query, List<SearchFilter> searchFilters, String prefix, String query, List<SearchFilter> searchFilters,
String dsoType, Pageable page, String facetName) String dsoType, Pageable page, String facetName)
throws InvalidRequestException { throws InvalidRequestException {
@@ -109,7 +109,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
dsoType); dsoType);
//When all search criteria are set, configure facet results //When all search criteria are set, configure facet results
addFacetingForFacets(context, scope, queryArgs, discoveryConfiguration, facetName, page); addFacetingForFacets(context, scope, prefix, queryArgs, discoveryConfiguration, facetName, page);
//We don' want any search results, we only want facet values //We don' want any search results, we only want facet values
queryArgs.setMaxResults(0); queryArgs.setMaxResults(0);
@@ -126,8 +126,8 @@ public class DiscoverQueryBuilder implements InitializingBean {
} }
} }
private DiscoverQuery addFacetingForFacets(Context context, DSpaceObject scope, DiscoverQuery queryArgs, private DiscoverQuery addFacetingForFacets(Context context, DSpaceObject scope, String prefix,
DiscoveryConfiguration discoveryConfiguration, DiscoverQuery queryArgs, DiscoveryConfiguration discoveryConfiguration,
String facetName, Pageable page) throws InvalidSearchFacetException { String facetName, Pageable page) throws InvalidSearchFacetException {
DiscoverySearchFilterFacet facet = discoveryConfiguration.getSidebarFacet(facetName); DiscoverySearchFilterFacet facet = discoveryConfiguration.getSidebarFacet(facetName);
@@ -135,7 +135,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
queryArgs.setFacetMinCount(1); queryArgs.setFacetMinCount(1);
int pageSize = Math.min(pageSizeLimit, page.getPageSize()); int pageSize = Math.min(pageSizeLimit, page.getPageSize());
fillFacetIntoQueryArgs(context, scope, queryArgs, facet, pageSize); fillFacetIntoQueryArgs(context, scope, prefix, queryArgs, facet, pageSize);
} else { } else {
throw new InvalidSearchFacetException(facetName + " is not a valid search facet"); throw new InvalidSearchFacetException(facetName + " is not a valid search facet");
@@ -144,7 +144,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
return queryArgs; return queryArgs;
} }
private void fillFacetIntoQueryArgs(Context context, DSpaceObject scope, DiscoverQuery queryArgs, private void fillFacetIntoQueryArgs(Context context, DSpaceObject scope, String prefix, DiscoverQuery queryArgs,
DiscoverySearchFilterFacet facet, final int pageSize) { DiscoverySearchFilterFacet facet, final int pageSize) {
if (facet.getType().equals(DiscoveryConfigurationParameters.TYPE_DATE)) { if (facet.getType().equals(DiscoveryConfigurationParameters.TYPE_DATE)) {
try { try {
@@ -165,7 +165,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
int facetLimit = pageSize + 1; int facetLimit = pageSize + 1;
//This should take care of the sorting for us //This should take care of the sorting for us
queryArgs.addFacetField(new DiscoverFacetField(facet.getIndexFieldName(), facet.getType(), facetLimit, queryArgs.addFacetField(new DiscoverFacetField(facet.getIndexFieldName(), facet.getType(), facetLimit,
facet.getSortOrderSidebar())); facet.getSortOrderSidebar(), StringUtils.trimToNull(prefix)));
} }
} }
@@ -321,7 +321,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
/** enable faceting of search results */ /** enable faceting of search results */
for (DiscoverySearchFilterFacet facet : facets) { for (DiscoverySearchFilterFacet facet : facets) {
fillFacetIntoQueryArgs(context, scope, queryArgs, facet, facet.getFacetLimit()); fillFacetIntoQueryArgs(context, scope, null, queryArgs, facet, facet.getFacetLimit());
} }
} }