mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-09 19:13:18 +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.InputStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@@ -64,7 +66,12 @@ import org.apache.solr.handler.extraction.ExtractingParams;
|
|||||||
import org.dspace.authorize.ResourcePolicy;
|
import org.dspace.authorize.ResourcePolicy;
|
||||||
import org.dspace.authorize.factory.AuthorizeServiceFactory;
|
import org.dspace.authorize.factory.AuthorizeServiceFactory;
|
||||||
import org.dspace.content.Collection;
|
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.Choices;
|
||||||
import org.dspace.content.authority.service.ChoiceAuthorityService;
|
import org.dspace.content.authority.service.ChoiceAuthorityService;
|
||||||
import org.dspace.content.authority.service.MetadataAuthorityService;
|
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.CollectionService;
|
||||||
import org.dspace.content.service.CommunityService;
|
import org.dspace.content.service.CommunityService;
|
||||||
import org.dspace.content.service.ItemService;
|
import org.dspace.content.service.ItemService;
|
||||||
import org.dspace.core.*;
|
import org.dspace.core.ConfigurationManager;
|
||||||
import org.dspace.discovery.configuration.*;
|
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.Group;
|
||||||
import org.dspace.eperson.factory.EPersonServiceFactory;
|
import org.dspace.eperson.factory.EPersonServiceFactory;
|
||||||
import org.dspace.handle.service.HandleService;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
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,
|
* SolrIndexer contains the methods that index Items and their metadata,
|
||||||
* collections, communities, etc. It is meant to either be invoked from the
|
* collections, communities, etc. It is meant to either be invoked from the
|
||||||
@@ -1767,6 +1778,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
|||||||
solrQuery.setFacetPrefix(field, facetFieldConfig.getPrefix());
|
solrQuery.setFacetPrefix(field, facetFieldConfig.getPrefix());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<String> facetQueries = discoveryQuery.getFacetQueries();
|
List<String> facetQueries = discoveryQuery.getFacetQueries();
|
||||||
for (String facetQuery : facetQueries)
|
for (String facetQuery : facetQueries)
|
||||||
@@ -1779,6 +1791,8 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
|||||||
solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
|
solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(CollectionUtils.isNotEmpty(facetFields) || CollectionUtils.isNotEmpty(facetQueries))
|
||||||
|
{
|
||||||
solrQuery.setParam(FacetParams.FACET_OFFSET, String.valueOf(discoveryQuery.getFacetOffset()));
|
solrQuery.setParam(FacetParams.FACET_OFFSET, String.valueOf(discoveryQuery.getFacetOffset()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,14 +7,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.dspace.discovery.configuration;
|
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.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
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)
|
* @author Kevin Van de Velde (kevin at atmire dot com)
|
||||||
*/
|
*/
|
||||||
@@ -181,4 +182,13 @@ public class DiscoveryConfiguration implements InitializingBean{
|
|||||||
throw new DiscoveryConfigurationException(error.toString());
|
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.core.Context;
|
||||||
import org.dspace.discovery.DiscoverResult;
|
import org.dspace.discovery.DiscoverResult;
|
||||||
import org.dspace.discovery.configuration.DiscoveryConfiguration;
|
import org.dspace.discovery.configuration.DiscoveryConfiguration;
|
||||||
|
import org.dspace.discovery.configuration.DiscoverySearchFilterFacet;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -29,21 +30,25 @@ 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, 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();
|
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);
|
setRequestInformation(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, facetResultsRest, page);
|
||||||
|
|
||||||
return facetResultsRest;
|
return facetResultsRest;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addToFacetResultList(String facetName, DiscoverResult searchResult, FacetResultsRest facetResultsRest, Pageable page) {
|
private void addToFacetResultList(String facetName, DiscoverResult searchResult, FacetResultsRest facetResultsRest,
|
||||||
List<DiscoverResult.FacetResult> facetValues = searchResult.getFacetResult(facetName);
|
DiscoveryConfiguration configuration, Pageable page) {
|
||||||
|
|
||||||
|
DiscoverySearchFilterFacet field = configuration.getSidebarFacet(facetName);
|
||||||
|
List<DiscoverResult.FacetResult> facetValues = searchResult.getFacetResult(field);
|
||||||
int valueCount = 0;
|
int valueCount = 0;
|
||||||
|
|
||||||
for (DiscoverResult.FacetResult value : CollectionUtils.emptyIfNull(facetValues)) {
|
for (DiscoverResult.FacetResult value : CollectionUtils.emptyIfNull(facetValues)) {
|
||||||
if(valueCount >= page.getPageSize()){
|
if (valueCount >= page.getPageSize()) {
|
||||||
//We requested one facet value more as the page size. We must make sure to not return the extra value.
|
//We requested one facet value more as the page size. We must make sure to not return the extra value.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -63,7 +68,7 @@ public class DiscoverFacetResultsConverter {
|
|||||||
facetResultsRest.setDsoType(dsoType);
|
facetResultsRest.setDsoType(dsoType);
|
||||||
facetResultsRest.setPage(page);
|
facetResultsRest.setPage(page);
|
||||||
|
|
||||||
facetResultsRest.setFacetEntry(convertFacetEntry(facetName, searchResult, page));
|
facetResultsRest.setFacetEntry(convertFacetEntry(facetName, searchResult, configuration, page));
|
||||||
|
|
||||||
facetResultsRest.setSort(SearchResultsRest.Sorting.fromPage(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);
|
SearchFacetEntryRest facetEntryRest = new SearchFacetEntryRest(facetName);
|
||||||
if(!searchResult.getFacetResult(facetName).isEmpty()){
|
List<DiscoverResult.FacetResult> facetResults = searchResult.getFacetResult(field);
|
||||||
facetEntryRest.setFacetType(searchResult.getFacetResult(facetName).get(0).getFieldType());
|
|
||||||
|
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
|
//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;
|
return facetEntryRest;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user