DS-3489: Fix date facet values results

This commit is contained in:
Tom Desair
2017-11-02 17:30:21 +01:00
committed by Tom Desair
parent b1675c3aa8
commit cc93b8a64b
3 changed files with 79 additions and 46 deletions

View File

@@ -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()));
} }

View File

@@ -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;
}
} }

View File

@@ -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;
} }