private static DocComparatorSource getComparatorSource(Browsable browser, SortField sf) { DocComparatorSource compSource = null; if (SortField.FIELD_DOC.equals(sf)) { compSource = new DocIdDocComparatorSource(); } else if (SortField.FIELD_SCORE.equals(sf) || sf.getType() == SortField.SCORE) { // we want to do reverse sorting regardless for relevance compSource = new ReverseDocComparatorSource(new RelevanceDocComparatorSource()); } else if (sf instanceof BoboCustomSortField) { BoboCustomSortField custField = (BoboCustomSortField) sf; DocComparatorSource src = custField.getCustomComparatorSource(); assert src != null; compSource = src; } else { Set<String> facetNames = browser.getFacetNames(); String sortName = sf.getField(); if (facetNames.contains(sortName)) { FacetHandler<?> handler = browser.getFacetHandler(sortName); assert handler != null; compSource = handler.getDocComparatorSource(); } else { // default lucene field logger.info("doing default lucene sort for: " + sf); compSource = getNonFacetComparatorSource(sf); } } boolean reverse = sf.getReverse(); if (reverse) { compSource = new ReverseDocComparatorSource(compSource); } compSource.setReverse(reverse); return compSource; }
@Override public DocComparator getComparator(IndexReader reader, int docbase) throws IOException { return new ReverseDocComparator(_inner.getComparator(reader, docbase)); }