Class CollapsingTopDocsCollector<T>
- java.lang.Object
-
- org.apache.lucene.search.SimpleCollector
-
- org.apache.lucene.search.grouping.FirstPassGroupingCollector<T>
-
- org.apache.lucene.search.grouping.CollapsingTopDocsCollector<T>
-
- All Implemented Interfaces:
org.apache.lucene.search.Collector
,org.apache.lucene.search.LeafCollector
public final class CollapsingTopDocsCollector<T> extends org.apache.lucene.search.grouping.FirstPassGroupingCollector<T>
A collector that groups documents based on field values and returnsCollapseTopFieldDocs
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 inCollapseTopFieldDocs.collapseValues
. TODO: If the sort is based on score we should propagate the mininum competitive score whenorderedGroups
is full. This is safe for collapsing since the groupsort
is the same as the query sort.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
collapseField
protected org.apache.lucene.search.Scorable
scorer
protected org.apache.lucene.search.Sort
sort
-
Method Summary
Modifier and Type Method Description void
collect(int doc)
static CollapsingTopDocsCollector<?>
createKeyword(java.lang.String collapseField, MappedFieldType collapseFieldType, org.apache.lucene.search.Sort sort, int topN)
Create a collapsing top docs collector on aSortedDocValues
field.static CollapsingTopDocsCollector<?>
createNumeric(java.lang.String collapseField, MappedFieldType collapseFieldType, org.apache.lucene.search.Sort sort, int topN)
Create a collapsing top docs collector on aNumericDocValues
field.CollapseTopFieldDocs
getTopDocs()
TransformFirstPassGroupingCollector.getTopGroups(int)
output inCollapseTopFieldDocs
.org.apache.lucene.search.ScoreMode
scoreMode()
void
setScorer(org.apache.lucene.search.Scorable scorer)
-
-
-
Method Detail
-
getTopDocs
public CollapseTopFieldDocs getTopDocs() throws java.io.IOException
TransformFirstPassGroupingCollector.getTopGroups(int)
output inCollapseTopFieldDocs
. The collapsing needs only one pass so we can get the final top docs at the end of the first pass.- Throws:
java.io.IOException
-
scoreMode
public org.apache.lucene.search.ScoreMode scoreMode()
- Specified by:
scoreMode
in interfaceorg.apache.lucene.search.Collector
- Overrides:
scoreMode
in classorg.apache.lucene.search.grouping.FirstPassGroupingCollector<T>
-
setScorer
public void setScorer(org.apache.lucene.search.Scorable scorer) throws java.io.IOException
- Specified by:
setScorer
in interfaceorg.apache.lucene.search.LeafCollector
- Overrides:
setScorer
in classorg.apache.lucene.search.grouping.FirstPassGroupingCollector<T>
- Throws:
java.io.IOException
-
collect
public void collect(int doc) throws java.io.IOException
- Specified by:
collect
in interfaceorg.apache.lucene.search.LeafCollector
- Overrides:
collect
in classorg.apache.lucene.search.grouping.FirstPassGroupingCollector<T>
- Throws:
java.io.IOException
-
createNumeric
public static CollapsingTopDocsCollector<?> createNumeric(java.lang.String collapseField, MappedFieldType collapseFieldType, org.apache.lucene.search.Sort sort, int topN)
Create a collapsing top docs collector on aNumericDocValues
field. It accepts alsoSortedNumericDocValues
field but the collect will fail with anIllegalStateException
if a document contains more than one value for the field.- Parameters:
collapseField
- The sort field used to group documents.collapseFieldType
- TheMappedFieldType
for this sort field.sort
- TheSort
used to sort the collapsed hits. The collapsing keeps only the top sorted document per collapsed key. This must be non-null, ie, if you want to groupSort by relevance use Sort.RELEVANCE.topN
- How many top groups to keep.
-
createKeyword
public static CollapsingTopDocsCollector<?> createKeyword(java.lang.String collapseField, MappedFieldType collapseFieldType, org.apache.lucene.search.Sort sort, int topN)
Create a collapsing top docs collector on aSortedDocValues
field. It accepts alsoSortedSetDocValues
field but the collect will fail with anIllegalStateException
if a document contains more than one value for the field.- Parameters:
collapseField
- The sort field used to group documents.collapseFieldType
- TheMappedFieldType
for this sort field.sort
- TheSort
used to sort the collapsed hits. The collapsing keeps only the top sorted document per collapsed key. This must be non-null, ie, if you want to groupSort by relevance use Sort.RELEVANCE.topN
- How many top groups to keep.
-
-