mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
DS-3489: Add support for facet prefix
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user