mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
DS-3489: Fix date facet values results
This commit is contained in:
@@ -11,6 +11,8 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.sql.SQLException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
@@ -64,7 +66,12 @@ import org.apache.solr.handler.extraction.ExtractingParams;
|
||||
import org.dspace.authorize.ResourcePolicy;
|
||||
import org.dspace.authorize.factory.AuthorizeServiceFactory;
|
||||
import org.dspace.content.Collection;
|
||||
import org.dspace.content.*;
|
||||
import org.dspace.content.Community;
|
||||
import org.dspace.content.DSpaceObject;
|
||||
import org.dspace.content.Item;
|
||||
import org.dspace.content.MetadataField;
|
||||
import org.dspace.content.MetadataSchema;
|
||||
import org.dspace.content.MetadataValue;
|
||||
import org.dspace.content.authority.Choices;
|
||||
import org.dspace.content.authority.service.ChoiceAuthorityService;
|
||||
import org.dspace.content.authority.service.MetadataAuthorityService;
|
||||
@@ -72,8 +79,23 @@ import org.dspace.content.factory.ContentServiceFactory;
|
||||
import org.dspace.content.service.CollectionService;
|
||||
import org.dspace.content.service.CommunityService;
|
||||
import org.dspace.content.service.ItemService;
|
||||
import org.dspace.core.*;
|
||||
import org.dspace.discovery.configuration.*;
|
||||
import org.dspace.core.ConfigurationManager;
|
||||
import org.dspace.core.Constants;
|
||||
import org.dspace.core.Context;
|
||||
import org.dspace.core.Email;
|
||||
import org.dspace.core.I18nUtil;
|
||||
import org.dspace.core.LogManager;
|
||||
import org.dspace.discovery.configuration.DiscoveryConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoveryConfigurationParameters;
|
||||
import org.dspace.discovery.configuration.DiscoveryHitHighlightFieldConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoveryHitHighlightingConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoveryMoreLikeThisConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoveryRecentSubmissionsConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoverySearchFilter;
|
||||
import org.dspace.discovery.configuration.DiscoverySearchFilterFacet;
|
||||
import org.dspace.discovery.configuration.DiscoverySortConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoverySortFieldConfiguration;
|
||||
import org.dspace.discovery.configuration.HierarchicalSidebarFacetConfiguration;
|
||||
import org.dspace.eperson.Group;
|
||||
import org.dspace.eperson.factory.EPersonServiceFactory;
|
||||
import org.dspace.handle.service.HandleService;
|
||||
@@ -83,17 +105,6 @@ import org.dspace.util.MultiFormatDateParser;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.sql.SQLException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* SolrIndexer contains the methods that index Items and their metadata,
|
||||
* collections, communities, etc. It is meant to either be invoked from the
|
||||
@@ -1767,18 +1778,21 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
solrQuery.setFacetPrefix(field, facetFieldConfig.getPrefix());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<String> facetQueries = discoveryQuery.getFacetQueries();
|
||||
for (String facetQuery : facetQueries)
|
||||
{
|
||||
solrQuery.addFacetQuery(facetQuery);
|
||||
}
|
||||
List<String> facetQueries = discoveryQuery.getFacetQueries();
|
||||
for (String facetQuery : facetQueries)
|
||||
{
|
||||
solrQuery.addFacetQuery(facetQuery);
|
||||
}
|
||||
|
||||
if (discoveryQuery.getFacetMinCount() != -1)
|
||||
{
|
||||
solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
|
||||
}
|
||||
if (discoveryQuery.getFacetMinCount() != -1)
|
||||
{
|
||||
solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
|
||||
}
|
||||
|
||||
if(CollectionUtils.isNotEmpty(facetFields) || CollectionUtils.isNotEmpty(facetQueries))
|
||||
{
|
||||
solrQuery.setParam(FacetParams.FACET_OFFSET, String.valueOf(discoveryQuery.getFacetOffset()));
|
||||
}
|
||||
|
||||
|
@@ -7,14 +7,15 @@
|
||||
*/
|
||||
package org.dspace.discovery.configuration;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Required;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Required;
|
||||
|
||||
/**
|
||||
* @author Kevin Van de Velde (kevin at atmire dot com)
|
||||
*/
|
||||
@@ -180,5 +181,14 @@ public class DiscoveryConfiguration implements InitializingBean{
|
||||
|
||||
throw new DiscoveryConfigurationException(error.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DiscoverySearchFilterFacet getSidebarFacet(final String facetName) {
|
||||
for (DiscoverySearchFilterFacet sidebarFacet : sidebarFacets) {
|
||||
if(StringUtils.equals(sidebarFacet.getIndexFieldName(), facetName)) {
|
||||
return sidebarFacet;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -18,6 +18,7 @@ import org.dspace.app.rest.parameter.SearchFilter;
|
||||
import org.dspace.core.Context;
|
||||
import org.dspace.discovery.DiscoverResult;
|
||||
import org.dspace.discovery.configuration.DiscoveryConfiguration;
|
||||
import org.dspace.discovery.configuration.DiscoverySearchFilterFacet;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -29,28 +30,32 @@ 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, DiscoveryConfiguration configuration, Pageable page){
|
||||
public FacetResultsRest convert(Context context, String facetName, String query, String dsoType, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult, DiscoveryConfiguration configuration, Pageable page) {
|
||||
FacetResultsRest facetResultsRest = new FacetResultsRest();
|
||||
|
||||
addToFacetResultList(facetName, searchResult, facetResultsRest, page);
|
||||
addToFacetResultList(facetName, searchResult, facetResultsRest, configuration, page);
|
||||
|
||||
setRequestInformation(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, facetResultsRest, page);
|
||||
|
||||
return facetResultsRest;
|
||||
}
|
||||
|
||||
private void addToFacetResultList(String facetName, DiscoverResult searchResult, FacetResultsRest facetResultsRest, Pageable page) {
|
||||
List<DiscoverResult.FacetResult> facetValues = searchResult.getFacetResult(facetName);
|
||||
int valueCount = 0;
|
||||
for (DiscoverResult.FacetResult value : CollectionUtils.emptyIfNull(facetValues)) {
|
||||
if(valueCount >= page.getPageSize()){
|
||||
//We requested one facet value more as the page size. We must make sure to not return the extra value.
|
||||
break;
|
||||
}
|
||||
SearchFacetValueRest searchFacetValueRest = buildSearchFacetValueRestFromFacetResult(value);
|
||||
facetResultsRest.addToFacetResultList(searchFacetValueRest);
|
||||
valueCount++;
|
||||
private void addToFacetResultList(String facetName, DiscoverResult searchResult, FacetResultsRest facetResultsRest,
|
||||
DiscoveryConfiguration configuration, Pageable page) {
|
||||
|
||||
DiscoverySearchFilterFacet field = configuration.getSidebarFacet(facetName);
|
||||
List<DiscoverResult.FacetResult> facetValues = searchResult.getFacetResult(field);
|
||||
int valueCount = 0;
|
||||
|
||||
for (DiscoverResult.FacetResult value : CollectionUtils.emptyIfNull(facetValues)) {
|
||||
if (valueCount >= page.getPageSize()) {
|
||||
//We requested one facet value more as the page size. We must make sure to not return the extra value.
|
||||
break;
|
||||
}
|
||||
SearchFacetValueRest searchFacetValueRest = buildSearchFacetValueRestFromFacetResult(value);
|
||||
facetResultsRest.addToFacetResultList(searchFacetValueRest);
|
||||
valueCount++;
|
||||
}
|
||||
}
|
||||
|
||||
private SearchFacetValueRest buildSearchFacetValueRestFromFacetResult(DiscoverResult.FacetResult value) {
|
||||
@@ -63,7 +68,7 @@ public class DiscoverFacetResultsConverter {
|
||||
facetResultsRest.setDsoType(dsoType);
|
||||
facetResultsRest.setPage(page);
|
||||
|
||||
facetResultsRest.setFacetEntry(convertFacetEntry(facetName, searchResult, page));
|
||||
facetResultsRest.setFacetEntry(convertFacetEntry(facetName, searchResult, configuration, page));
|
||||
|
||||
facetResultsRest.setSort(SearchResultsRest.Sorting.fromPage(page));
|
||||
|
||||
@@ -75,14 +80,18 @@ public class DiscoverFacetResultsConverter {
|
||||
}
|
||||
}
|
||||
|
||||
private SearchFacetEntryRest convertFacetEntry(final String facetName, final DiscoverResult searchResult, final Pageable page) {
|
||||
private SearchFacetEntryRest convertFacetEntry(final String facetName, final DiscoverResult searchResult, final DiscoveryConfiguration configuration, final Pageable page) {
|
||||
DiscoverySearchFilterFacet field = configuration.getSidebarFacet(facetName);
|
||||
|
||||
SearchFacetEntryRest facetEntryRest = new SearchFacetEntryRest(facetName);
|
||||
if(!searchResult.getFacetResult(facetName).isEmpty()){
|
||||
facetEntryRest.setFacetType(searchResult.getFacetResult(facetName).get(0).getFieldType());
|
||||
List<DiscoverResult.FacetResult> facetResults = searchResult.getFacetResult(field);
|
||||
|
||||
if (!facetResults.isEmpty()) {
|
||||
facetEntryRest.setFacetType(facetResults.get(0).getFieldType());
|
||||
}
|
||||
|
||||
//We requested one extra facet value. Check if that value is present to indicate that there are more results
|
||||
facetEntryRest.setHasMore( searchResult.getFacetResult(facetName).size() > page.getPageSize() );
|
||||
facetEntryRest.setHasMore(facetResults.size() > page.getPageSize());
|
||||
|
||||
return facetEntryRest;
|
||||
}
|
||||
|
Reference in New Issue
Block a user