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}")
public ResourceSupport getFacetValues(@PathVariable("name") String facetName,
@RequestParam(name = "prefix", required = false) String prefix,
@RequestParam(name = "query", required = false) String query,
@RequestParam(name = "dsoType", required = false) String dsoType,
@RequestParam(name = "scope", required = false) String dsoScope,
@@ -179,13 +180,14 @@ public class DiscoveryRestController implements InitializingBean {
if (log.isTraceEnabled()) {
log.trace("Facetting on facet " + facetName + " with scope: " + StringUtils.trimToEmpty(dsoScope)
+ ", dsoType: " + StringUtils.trimToEmpty(dsoType)
+ ", prefix: " + StringUtils.trimToEmpty(prefix)
+ ", query: " + StringUtils.trimToEmpty(dsoType)
+ ", filters: " + Objects.toString(searchFilters)
+ ", page: " + Objects.toString(page));
}
FacetResultsRest facetResultsRest = discoveryRestRepository
.getFacetObjects(facetName, query, dsoType, dsoScope, searchFilters, page);
.getFacetObjects(facetName, prefix, query, dsoType, dsoScope, searchFilters, page);
FacetResultsResource facetResultsResource = new FacetResultsResource(facetResultsRest);

View File

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

View File

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

View File

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

View File

@@ -20,6 +20,8 @@ public class FacetResultsRest extends DiscoveryResultsRest {
@JsonUnwrapped
private SearchFacetEntryRest facetEntry;
private String prefix;
public void addToFacetResultList(SearchFacetValueRest facetResult) {
facetEntry.addValue(facetResult);
}
@@ -33,7 +35,15 @@ public class FacetResultsRest extends DiscoveryResultsRest {
return facetEntry;
}
public void setFacetEntry(final SearchFacetEntryRest facetEntry) {
public void setFacetEntry(SearchFacetEntryRest 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();
}
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)
throws InvalidRequestException {
@@ -143,7 +143,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
DiscoverQuery discoverQuery = null;
try {
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);
} catch (SearchServiceException e) {
@@ -152,7 +152,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
}
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;
}

View File

@@ -101,7 +101,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
public DiscoverQuery buildFacetQuery(Context context, DSpaceObject scope,
DiscoveryConfiguration discoveryConfiguration,
String query, List<SearchFilter> searchFilters,
String prefix, String query, List<SearchFilter> searchFilters,
String dsoType, Pageable page, String facetName)
throws InvalidRequestException {
@@ -109,7 +109,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
dsoType);
//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
queryArgs.setMaxResults(0);
@@ -126,8 +126,8 @@ public class DiscoverQueryBuilder implements InitializingBean {
}
}
private DiscoverQuery addFacetingForFacets(Context context, DSpaceObject scope, DiscoverQuery queryArgs,
DiscoveryConfiguration discoveryConfiguration,
private DiscoverQuery addFacetingForFacets(Context context, DSpaceObject scope, String prefix,
DiscoverQuery queryArgs, DiscoveryConfiguration discoveryConfiguration,
String facetName, Pageable page) throws InvalidSearchFacetException {
DiscoverySearchFilterFacet facet = discoveryConfiguration.getSidebarFacet(facetName);
@@ -135,7 +135,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
queryArgs.setFacetMinCount(1);
int pageSize = Math.min(pageSizeLimit, page.getPageSize());
fillFacetIntoQueryArgs(context, scope, queryArgs, facet, pageSize);
fillFacetIntoQueryArgs(context, scope, prefix, queryArgs, facet, pageSize);
} else {
throw new InvalidSearchFacetException(facetName + " is not a valid search facet");
@@ -144,7 +144,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
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) {
if (facet.getType().equals(DiscoveryConfigurationParameters.TYPE_DATE)) {
try {
@@ -165,7 +165,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
int facetLimit = pageSize + 1;
//This should take care of the sorting for us
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 */
for (DiscoverySearchFilterFacet facet : facets) {
fillFacetIntoQueryArgs(context, scope, queryArgs, facet, facet.getFacetLimit());
fillFacetIntoQueryArgs(context, scope, null, queryArgs, facet, facet.getFacetLimit());
}
}