org.apache.lucene.search.grouping

## Class AbstractFirstPassGroupingCollector<GROUP_VALUE_TYPE>

- java.lang.Object
- - org.apache.lucene.search.Collector
  - - org.apache.lucene.search.grouping.AbstractFirstPassGroupingCollector<GROUP_VALUE_TYPE>

Direct Known Subclasses:
  FunctionFirstPassGroupingCollector, TermFirstPassGroupingCollector

    public abstract class AbstractFirstPassGroupingCollector<GROUP_VALUE_TYPE>
    extends Collector

FirstPassGroupingCollector is the first of two passes necessary to collect grouped hits. This pass gathers the top N sorted groups. Concrete subclasses define what a group is and how it is internally collected.

See `org.apache.lucene.search.grouping` for more details including a full code example.

WARNING: This API is experimental and might change in incompatible ways in the next release.

### Field Summary

Fields
`protected TreeSet<CollectedSearchGroup<GROUP_VALUE_TYPE>>` `orderedGroups`

### Constructor Summary

Constructors
Constructor and Description
`AbstractFirstPassGroupingCollector(Sort groupSort, int topNGroups)` Create the first pass collector.

### Method Summary

Methods
`boolean` `acceptsDocsOutOfOrder()`
`void` `collect(int doc)`
`protected abstract GROUP_VALUE_TYPE` `copyDocGroupValue(GROUP_VALUE_TYPE groupValue, GROUP_VALUE_TYPE reuse)` Returns a copy of the specified group value by creating a new instance and copying the value from the specified groupValue in the new instance.
`protected abstract GROUP_VALUE_TYPE` `getDocGroupValue(int doc)` Returns the group value for the specified doc.
`Collection<SearchGroup<GROUP_VALUE_TYPE>>` `getTopGroups(int groupOffset, boolean fillFields)` Returns top groups, starting from offset.
`void` `setNextReader(AtomicReaderContext readerContext)`
`void` `setScorer(Scorer scorer)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### orderedGroups

    protected TreeSet<CollectedSearchGroup<GROUP_VALUE_TYPE>> orderedGroups

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

### Constructor Detail

#### AbstractFirstPassGroupingCollector

    public AbstractFirstPassGroupingCollector(Sort groupSort,
                                      int topNGroups)
                                       throws IOException

Create the first pass collector.

Parameters:
  `groupSort` - The `Sort` used to sort the groups. The top sorted document within each group according to groupSort, determines how that group sorts against other groups. This must be non-null, ie, if you want to groupSort by relevance use Sort.RELEVANCE.
  `topNGroups` - How many top groups to keep.
Throws:
  `IOException` - If I/O related errors occur

### Method Detail

#### getTopGroups

    public Collection<SearchGroup<GROUP_VALUE_TYPE>> getTopGroups(int groupOffset,
                                                         boolean fillFields)

Returns top groups, starting from offset. This may return null, if no groups were collected, or if the number of unique groups collected is <= offset.

Parameters:
  `groupOffset` - The offset in the collected groups
  `fillFields` - Whether to fill to `SearchGroup.sortValues`
Returns:
  top groups, starting from offset

#### setScorer

    public void setScorer(Scorer scorer)
                   throws IOException

Specified by:
  `setScorer` in class `Collector`
Throws:
  `IOException`

#### collect

    public void collect(int doc)
                 throws IOException

Specified by:
  `collect` in class `Collector`
Throws:
  `IOException`

#### acceptsDocsOutOfOrder

    public boolean acceptsDocsOutOfOrder()

Specified by:
  `acceptsDocsOutOfOrder` in class `Collector`

#### setNextReader

    public void setNextReader(AtomicReaderContext readerContext)
                       throws IOException

Specified by:
  `setNextReader` in class `Collector`
Throws:
  `IOException`

#### getDocGroupValue

    protected abstract GROUP_VALUE_TYPE getDocGroupValue(int doc)

Returns the group value for the specified doc.

Parameters:
  `doc` - The specified doc
Returns:
  the group value for the specified doc

#### copyDocGroupValue

    protected abstract GROUP_VALUE_TYPE copyDocGroupValue(GROUP_VALUE_TYPE groupValue,
                                     GROUP_VALUE_TYPE reuse)

Returns a copy of the specified group value by creating a new instance and copying the value from the specified groupValue in the new instance. Or optionally the reuse argument can be used to copy the group value in.

Parameters:
  `groupValue` - The group value to copy
  `reuse` - Optionally a reuse instance to prevent a new instance creation
Returns:
  a copy of the specified group value