@Override public FacetYearRange getFacetYearRange(Context context, DSpaceObject scope, DiscoverySearchFilterFacet facet, List<String> filterQueries) throws SearchServiceException { FacetYearRange result = new FacetYearRange(facet); result.calculateRange(context, filterQueries, scope, this); return result; }
public void calculateRange(Context context, List<String> filterQueries, DSpaceObject scope, SearchService searchService) throws SearchServiceException { dateFacet = facet.getIndexFieldName() + ".year"; //Get a range query so we can create facet queries ranging from our first to our last date //Attempt to determine our oldest & newest year by checking for previously selected filters lookupPreviousRangeInFilterQueries(filterQueries); //Check if we have found a range, if not then retrieve our first & last year using Solr if (oldestYear == -1 && newestYear == -1) { calculateNewRangeBasedOnSearchIndex(context, filterQueries, scope, searchService); } }
public void addYearRangeFacet(DiscoverySearchFilterFacet facet, FacetYearRange facetYearRange) { if (facetYearRange.isValid()) { int newestYear = facetYearRange.getNewestYear(); int oldestYear = facetYearRange.getOldestYear(); String dateFacet = facetYearRange.getDateFacet(); int gap = facetYearRange.getYearGap(); // We need to determine our top year so we can start our count from a clean year // Example: 2001 and a gap from 10 we need the following result: 2010 - 2000 ; 2000 - 1990 hence the top // year int topYear = getTopYear(newestYear, gap); if (gap == 1) { //We need a list of our years //We have a date range add faceting for our field //The faceting will automatically be limited to the 10 years in our span due to our filterquery this.addFacetField(new DiscoverFacetField(facet.getIndexFieldName(), facet.getType(), 10, facet.getSortOrderSidebar())); } else { List<String> facetQueries = buildFacetQueriesWithGap(newestYear, oldestYear, dateFacet, gap, topYear, facet.getFacetLimit()); for (String facetQuery : CollectionUtils.emptyIfNull(facetQueries)) { this.addFacetQuery(facetQuery); } } } }
public int getYearGap() { int gap = 1; //Attempt to retrieve our gap using the algorithm below int yearDifference = newestYear - oldestYear; if (yearDifference != 0) { gap = round((double) yearDifference / facet.getFacetLimit(), 10); } return gap; }