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

View File

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

View File

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