## org.apache.lucene.facet.search
Class FacetsCollector

    java.lang.Object
      org.apache.lucene.search.Collector
          org.apache.lucene.facet.search.FacetsCollector

    public class FacetsCollector

extends Collector

Collector for facet accumulation. *

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

Field Summary
`protected FacetsAccumulator` `facetsAccumulator`

Constructor Summary
`FacetsCollector(FacetSearchParams facetSearchParams, IndexReader indexReader, TaxonomyReader taxonomyReader)` Create a collector for accumulating facets while collecting documents during search.

Method Summary
`boolean` `acceptsDocsOutOfOrder()` Return `true` if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to `Collector.collect(int)`.
`void` `collect(int doc)` Called once for every document matching a query, with the unbased document number.
`List<FacetResult>` `getFacetResults()` Return accumulated facets results (according to faceted search parameters) for collected documents.
`protected FacetsAccumulator` `initFacetsAccumulator(FacetSearchParams facetSearchParams, IndexReader indexReader, TaxonomyReader taxonomyReader)` Create the `FacetsAccumulator` to be used.
`protected ScoredDocIdCollector` `initScoredDocCollector(FacetSearchParams facetSearchParams, IndexReader indexReader, TaxonomyReader taxonomyReader)` Create a `ScoredDocIdCollector` to be used as the first phase of the facet collection.
`void` `setNextReader(IndexReader reader, int docBase)` Called before collecting from each IndexReader.
`void` `setScorer(Scorer scorer)` Called before successive calls to `Collector.collect(int)`.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### facetsAccumulator

    protected final FacetsAccumulator facetsAccumulator

Constructor Detail

### FacetsCollector

    public FacetsCollector(FacetSearchParams facetSearchParams,
                           IndexReader indexReader,
                           TaxonomyReader taxonomyReader)

  Create a collector for accumulating facets while collecting documents during search.

  Parameters:
    `facetSearchParams` - faceted search parameters defining which facets are required and how.
    `indexReader` - searched index.
    `taxonomyReader` - taxonomy containing the facets.

Method Detail

### initScoredDocCollector

    protected ScoredDocIdCollector initScoredDocCollector(FacetSearchParams facetSearchParams,
                                                          IndexReader indexReader,
                                                          TaxonomyReader taxonomyReader)

  Create a `ScoredDocIdCollector` to be used as the first phase of the facet collection. If all facetRequests are do not require the document score, a ScoredDocIdCollector which does not store the document scores would be returned. Otherwise a SDIC which does store the documents will be returned, having an initial allocated space for 1000 such documents' scores.

### initFacetsAccumulator

    protected FacetsAccumulator initFacetsAccumulator(FacetSearchParams facetSearchParams,
                                                      IndexReader indexReader,
                                                      TaxonomyReader taxonomyReader)

  Create the `FacetsAccumulator` to be used. Default is `StandardFacetsAccumulator`. Called once at the constructor of the collector.

  Parameters:
    `facetSearchParams` - The search params.
    `indexReader` - A reader to the index to search in.
    `taxonomyReader` - A reader to the active taxonomy.
  Returns:
    The `FacetsAccumulator` to use.

### getFacetResults

    public List<FacetResult> getFacetResults()
                                      throws IOException

  Return accumulated facets results (according to faceted search parameters) for collected documents.

  Throws:
    `IOException` - on error

### acceptsDocsOutOfOrder

    public boolean acceptsDocsOutOfOrder()

  Description copied from class: `Collector`
  Return `true` if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to `Collector.collect(int)`.

  Most Lucene Query implementations will visit matching docIDs in order. However, some queries (currently limited to certain cases of `BooleanQuery`) can achieve faster searching if the `Collector` allows them to deliver the docIDs out of order.

  Many collectors don't mind getting docIDs out of order, so it's important to return `true` here.

  Specified by:
    `acceptsDocsOutOfOrder` in class `Collector`

### collect

    public void collect(int doc)
                 throws IOException

  Description copied from class: `Collector`
  Called once for every document matching a query, with the unbased document number.

  Note: This is called in an inner search loop. For good search performance, implementations of this method should not call `Searcher.doc(int)` or `IndexReader.document(int)` on every hit. Doing so can slow searches by an order of magnitude or more.

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

### setNextReader

    public void setNextReader(IndexReader reader,
                              int docBase)
                       throws IOException

  Description copied from class: `Collector`
  Called before collecting from each IndexReader. All doc ids in `Collector.collect(int)` will correspond to reader. Add docBase to the current IndexReaders internal document id to re-base ids in `Collector.collect(int)`.

  Specified by:
    `setNextReader` in class `Collector`
  Parameters:
    `reader` - next IndexReader
  Throws:
    `IOException`

### setScorer

    public void setScorer(Scorer scorer)
                   throws IOException

  Description copied from class: `Collector`
  Called before successive calls to `Collector.collect(int)`. Implementations that need the score of the current document (passed-in to `Collector.collect(int)`), should save the passed-in Scorer and call scorer.score() when needed.

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