diff options
Diffstat (limited to 'core/src/main/java/org/apache/lucene/search/grouping/CollapsingTopDocsCollector.java')
-rw-r--r-- | core/src/main/java/org/apache/lucene/search/grouping/CollapsingTopDocsCollector.java | 67 |
1 files changed, 8 insertions, 59 deletions
diff --git a/core/src/main/java/org/apache/lucene/search/grouping/CollapsingTopDocsCollector.java b/core/src/main/java/org/apache/lucene/search/grouping/CollapsingTopDocsCollector.java index 955a63e548..b5cb02bcd6 100644 --- a/core/src/main/java/org/apache/lucene/search/grouping/CollapsingTopDocsCollector.java +++ b/core/src/main/java/org/apache/lucene/search/grouping/CollapsingTopDocsCollector.java @@ -18,13 +18,11 @@ */ package org.apache.lucene.search.grouping; -import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.search.FieldDoc; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.Scorer; import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField; -import org.apache.lucene.util.BytesRef; import java.io.IOException; import java.util.Collection; @@ -37,7 +35,7 @@ import static org.apache.lucene.search.SortField.Type.SCORE; * output. The collapsing is done in a single pass by selecting only the top sorted document per collapse key. * The value used for the collapse key of each group can be found in {@link CollapseTopFieldDocs#collapseValues}. */ -public abstract class CollapsingTopDocsCollector<T> extends FirstPassGroupingCollector<T> { +public final class CollapsingTopDocsCollector<T> extends FirstPassGroupingCollector<T> { protected final String collapseField; protected final Sort sort; @@ -47,9 +45,9 @@ public abstract class CollapsingTopDocsCollector<T> extends FirstPassGroupingCol private float maxScore; private final boolean trackMaxScore; - private CollapsingTopDocsCollector(String collapseField, Sort sort, + CollapsingTopDocsCollector(GroupSelector<T> groupSelector, String collapseField, Sort sort, int topN, boolean trackMaxScore) throws IOException { - super(sort, topN); + super(groupSelector, sort, topN); this.collapseField = collapseField; this.trackMaxScore = trackMaxScore; if (trackMaxScore) { @@ -65,7 +63,7 @@ public abstract class CollapsingTopDocsCollector<T> extends FirstPassGroupingCol * {@link CollapseTopFieldDocs}. The collapsing needs only one pass so we can create the final top docs at the end * of the first pass. */ - public CollapseTopFieldDocs getTopDocs() { + public CollapseTopFieldDocs getTopDocs() throws IOException { Collection<SearchGroup<T>> groups = super.getTopGroups(0, true); if (groups == null) { return new CollapseTopFieldDocs(collapseField, totalHitCount, new ScoreDoc[0], @@ -121,57 +119,6 @@ public abstract class CollapsingTopDocsCollector<T> extends FirstPassGroupingCol totalHitCount++; } - private static class Numeric extends CollapsingTopDocsCollector<Long> { - private final CollapsingDocValuesSource.Numeric source; - - private Numeric(String collapseField, Sort sort, int topN, boolean trackMaxScore) throws IOException { - super(collapseField, sort, topN, trackMaxScore); - source = new CollapsingDocValuesSource.Numeric(collapseField); - } - - @Override - protected void doSetNextReader(LeafReaderContext readerContext) throws IOException { - super.doSetNextReader(readerContext); - source.setNextReader(readerContext.reader()); - } - - @Override - protected Long getDocGroupValue(int doc) { - return source.get(doc); - } - - @Override - protected Long copyDocGroupValue(Long groupValue, Long reuse) { - return source.copy(groupValue, reuse); - } - } - - private static class Keyword extends CollapsingTopDocsCollector<BytesRef> { - private final CollapsingDocValuesSource.Keyword source; - - private Keyword(String collapseField, Sort sort, int topN, boolean trackMaxScore) throws IOException { - super(collapseField, sort, topN, trackMaxScore); - source = new CollapsingDocValuesSource.Keyword(collapseField); - - } - - @Override - protected void doSetNextReader(LeafReaderContext readerContext) throws IOException { - super.doSetNextReader(readerContext); - source.setNextReader(readerContext.reader()); - } - - @Override - protected BytesRef getDocGroupValue(int doc) { - return source.get(doc); - } - - @Override - protected BytesRef copyDocGroupValue(BytesRef groupValue, BytesRef reuse) { - return source.copy(groupValue, reuse); - } - } - /** * Create a collapsing top docs collector on a {@link org.apache.lucene.index.NumericDocValues} field. * It accepts also {@link org.apache.lucene.index.SortedNumericDocValues} field but @@ -189,7 +136,8 @@ public abstract class CollapsingTopDocsCollector<T> extends FirstPassGroupingCol */ public static CollapsingTopDocsCollector<?> createNumeric(String collapseField, Sort sort, int topN, boolean trackMaxScore) throws IOException { - return new Numeric(collapseField, sort, topN, trackMaxScore); + return new CollapsingTopDocsCollector<>(new CollapsingDocValuesSource.Numeric(collapseField), + collapseField, sort, topN, trackMaxScore); } /** @@ -208,7 +156,8 @@ public abstract class CollapsingTopDocsCollector<T> extends FirstPassGroupingCol */ public static CollapsingTopDocsCollector<?> createKeyword(String collapseField, Sort sort, int topN, boolean trackMaxScore) throws IOException { - return new Keyword(collapseField, sort, topN, trackMaxScore); + return new CollapsingTopDocsCollector<>(new CollapsingDocValuesSource.Keyword(collapseField), + collapseField, sort, topN, trackMaxScore); } } |