{
  "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector.html",
    "title": "Class AbstractAllGroupHeadsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> Implements Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector : ICollector Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Return true if this collector does not require the matching docIDs to be delivered in int sort order (smallest to largest) to Collect(Int32) . 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 Lucene.Net.Search.ICollector 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. Declaration public abstract bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public abstract int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current Lucene.Net.Index.AtomicReaderContext will be skipped and Lucene.Net.Search.IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source RetrieveGroupHeads() Declaration public abstract int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public abstract FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description Lucene.Net.Util.FixedBitSet a Lucene.Net.Util.FixedBitSet containing all group heads. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each Lucene.Net.Index.AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Called before successive calls to Collect(Int32) . Implementations that need the score of the current document (passed-in to ), should save the passed-in Lucene.Net.Search.Scorer and call scorer.Score() when needed. Declaration public abstract void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector_GroupHead.html",
    "title": "Class AbstractAllGroupHeadsCollector_GroupHead | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector_GroupHead Remarks LUCENENET: moved this class from being a nested class of AbstractAllGroupHeadsCollector<GH> , made it non-generic so the generic closing type doesn't need to be specified in classes that use AbstractAllGroupHeadsCollector_GroupHead as a generic closing type, and renamed it from GroupHead to AbstractAllGroupHeadsCollector_GroupHead to avoid naming conflicts with nested classes named GroupHead in derived classes of AbstractAllGroupHeadsCollector . Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector_GroupHead(Int32) Declaration protected AbstractAllGroupHeadsCollector_GroupHead(int doc) Parameters Type Name Description System.Int32 doc Properties | Improve this Doc View Source Doc Declaration public int Doc { get; protected set; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source Compare(Int32, Int32) Compares the specified document for a specified comparer against the current most relevant document. Declaration public abstract int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX The comparer index of the specified comparer. System.Int32 doc The specified document. Returns Type Description System.Int32 -1 if the specified document wasn't competitive against the current most relevant document, 1 if the specified document was competitive against the current most relevant document. Otherwise 0. Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source UpdateDocHead(Int32) Updates the current most relevant document with the specified document. Declaration public abstract void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc The specified document Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector<GH> FunctionAllGroupHeadsCollector TermAllGroupHeadsCollector<GH> Implements Lucene.Net.Search.ICollector Inherited Members AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source AbstractAllGroupHeadsCollector(Int32) Declaration protected AbstractAllGroupHeadsCollector(int numberOfSorts) Parameters Type Name Description System.Int32 numberOfSorts Fields | Improve this Doc View Source m_compIDXEnd Declaration protected readonly int m_compIDXEnd Field Value Type Description System.Int32 | Improve this Doc View Source m_reversed Declaration protected readonly int[] m_reversed Field Value Type Description System.Int32 [] | Improve this Doc View Source m_temporalResult Declaration protected readonly AbstractAllGroupHeadsCollector<GH>.TemporalResult m_temporalResult Field Value Type Description AbstractAllGroupHeadsCollector.TemporalResult <> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public override bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Overrides AbstractAllGroupHeadsCollector.AcceptsDocsOutOfOrder | Improve this Doc View Source CollectedGroupHeads Returns the collected group heads. Subsequent calls should return the same group heads. Declaration protected abstract ICollection<GH> CollectedGroupHeads { get; } Property Value Type Description System.Collections.Generic.ICollection <GH> the collected group heads | Improve this Doc View Source GroupHeadsCount The number of group heads found for a query. LUCENENET NOTE: This was groupHeadsSize() in Lucene Declaration public override int GroupHeadsCount { get; } Property Value Type Description System.Int32 the number of group heads found for a query. Overrides AbstractAllGroupHeadsCollector.GroupHeadsCount Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector.Collect(Int32) | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Returns the group head and puts it into AbstractAllGroupHeadsCollector<GH>.TemporalResult . If the group head wasn't encountered before then it will be added to the collected group heads. The Stop property will be true if the group head wasn't encountered before otherwise false . Declaration protected abstract override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc The document to retrieve the group head for. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeadAndAddIfNotExist(Int32) Exceptions Type Condition System.IO.IOException If I/O related errors occur | Improve this Doc View Source RetrieveGroupHeads() Declaration public override int[] RetrieveGroupHeads() Returns Type Description System.Int32 [] an int array containing all group heads. The size of the array is equal to number of collected unique groups. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads() | Improve this Doc View Source RetrieveGroupHeads(Int32) Declaration public override FixedBitSet RetrieveGroupHeads(int maxDoc) Parameters Type Name Description System.Int32 maxDoc The maxDoc of the top level IndexReader Returns Type Description Lucene.Net.Util.FixedBitSet a Lucene.Net.Util.FixedBitSet containing all group heads. Overrides AbstractAllGroupHeadsCollector.RetrieveGroupHeads(Int32) Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector-1.TemporalResult.html",
    "title": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. Inheritance System.Object AbstractAllGroupHeadsCollector<GH>.TemporalResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected class TemporalResult Properties | Improve this Doc View Source GroupHead Declaration public GH GroupHead { get; set; } Property Value Type Description GH | Improve this Doc View Source Stop Declaration public bool Stop { get; set; } Property Value Type Description System.Boolean"
  },
  "Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractAllGroupsCollector-1.html",
    "title": "Class AbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector<TGroupValue> FunctionAllGroupsCollector TermAllGroupsCollector Implements IAbstractAllGroupsCollector <TGroupValue> Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractAllGroupsCollector<TGroupValue> : IAbstractAllGroupsCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration public virtual int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a Lucene.Net.Util.BytesRef representing a group value. Declaration public abstract IEnumerable<TGroupValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> the group values Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current Lucene.Net.Index.AtomicReaderContext will be skipped and Lucene.Net.Search.IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each Lucene.Net.Index.AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements IAbstractAllGroupsCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.GroupCount-1.html",
    "title": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. Inheritance System.Object AbstractDistinctValuesCollector.GroupCount<TGroupValue> FunctionDistinctValuesCollector.GroupCount TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class GroupCount<TGroupValue> : AbstractDistinctValuesCollector.IGroupCount<TGroupValue> Type Parameters Name Description TGroupValue Remarks LUCENENET - removed this class from being a nested class of AbstractDistinctValuesCollector<GC> and renamed from GroupCount to AbstractGroupCount Constructors | Improve this Doc View Source GroupCount(TGroupValue) Declaration protected GroupCount(TGroupValue groupValue) Parameters Type Name Description TGroupValue groupValue Properties | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; protected set; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration public IEnumerable<TGroupValue> UniqueValues { get; protected set; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.html",
    "title": "Class AbstractDistinctValuesCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). Inheritance System.Object AbstractDistinctValuesCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public static class AbstractDistinctValuesCollector"
  },
  "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector.IGroupCount-1.html",
    "title": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupCount<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source UniqueValues Declaration IEnumerable<TGroupValue> UniqueValues { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector-1.html",
    "title": "Class AbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector<GC> FunctionDistinctValuesCollector TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector <GC> Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractDistinctValuesCollector<GC> : IAbstractDistinctValuesCollector<GC>, ICollector where GC : AbstractDistinctValuesCollector.IGroupCount<object> Type Parameters Name Description GC Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration public abstract IEnumerable<GC> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <GC> all unique values for each top N group Methods | Improve this Doc View Source Collect(Int32) Called once for every document matching a query, with the unbased document number. Note: The collection of the current segment can be terminated by throwing a CollectionTerminatedException . In this case, the last docs of the current Lucene.Net.Index.AtomicReaderContext will be skipped and Lucene.Net.Search.IndexSearcher will swallow the exception and continue collection with the next leaf. Note: this is called in an inner search loop. For good search performance, implementations of this method should not call Doc(Int32) or Document(Int32) on every hit. Doing so can slow searches by an order of magnitude or more. Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source SetNextReader(AtomicReaderContext) Called before collecting from each Lucene.Net.Index.AtomicReaderContext . All doc ids in Collect(Int32) will correspond to Reader . Add DocBase to the current Reader 's internal document id to re-base ids in Collect(Int32) . Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context next atomic reader context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements IAbstractDistinctValuesCollector<GC> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector-1.html",
    "title": "Class AbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractFirstPassGroupingCollector<TGroupValue> 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. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector<TGroupValue> FunctionFirstPassGroupingCollector TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector <TGroupValue> Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractFirstPassGroupingCollector<TGroupValue> : IAbstractFirstPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractFirstPassGroupingCollector(Sort, Int32) Create the first pass collector. Declaration protected AbstractFirstPassGroupingCollector(Sort groupSort, int topNGroups) Parameters Type Name Description Lucene.Net.Search.Sort groupSort The Lucene.Net.Search.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. System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException If I/O related errors occur Fields | Improve this Doc View Source m_orderedGroups Declaration protected SortedSet<CollectedSearchGroup<TGroupValue>> m_orderedGroups Field Value Type Description J2N.Collections.Generic.SortedSet < CollectedSearchGroup <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CopyDocGroupValue(TGroupValue, TGroupValue) 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. Declaration protected abstract TGroupValue CopyDocGroupValue(TGroupValue groupValue, TGroupValue reuse) Parameters Type Name Description TGroupValue groupValue The group value to copy TGroupValue reuse Optionally a reuse instance to prevent a new instance creation Returns Type Description TGroupValue a copy of the specified group value | Improve this Doc View Source GetDocGroupValue(Int32) Returns the group value for the specified doc. Declaration protected abstract TGroupValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description TGroupValue the group value for the specified doc | Improve this Doc View Source GetTopGroups(Int32, Boolean) 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. Declaration public virtual IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements IAbstractFirstPassGroupingCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.AbstractSegmentResult.html",
    "title": "Class AbstractGroupFacetCollector.AbstractSegmentResult | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. Inheritance System.Object AbstractGroupFacetCollector.AbstractSegmentResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax protected abstract class AbstractSegmentResult Remarks LUCENENET NOTE: Renamed from SegmentResult to AbstractSegmentResult to avoid naming conflicts with subclasses. Constructors | Improve this Doc View Source AbstractSegmentResult(Int32[], Int32, Int32, Int32) Declaration protected AbstractSegmentResult(int[] counts, int total, int missing, int maxTermPos) Parameters Type Name Description System.Int32 [] counts System.Int32 total System.Int32 missing System.Int32 maxTermPos Fields | Improve this Doc View Source m_counts Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_maxTermPos Declaration protected readonly int m_maxTermPos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergePos Declaration protected int m_mergePos Field Value Type Description System.Int32 | Improve this Doc View Source m_mergeTerm Declaration protected BytesRef m_mergeTerm Field Value Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source m_missing Declaration protected readonly int m_missing Field Value Type Description System.Int32 | Improve this Doc View Source m_total Declaration protected readonly int m_total Field Value Type Description System.Int32 Methods | Improve this Doc View Source NextTerm() Go to next term in this AbstractGroupFacetCollector.AbstractSegmentResult in order to retrieve the grouped facet counts. Declaration protected abstract void NextTerm() Exceptions Type Condition System.IO.IOException If I/O related errors occur"
  },
  "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.FacetEntry.html",
    "title": "Class AbstractGroupFacetCollector.FacetEntry | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. Inheritance System.Object AbstractGroupFacetCollector.FacetEntry Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class FacetEntry Constructors | Improve this Doc View Source FacetEntry(BytesRef, Int32) Declaration public FacetEntry(BytesRef value, int count) Parameters Type Name Description Lucene.Net.Util.BytesRef value System.Int32 count Properties | Improve this Doc View Source Count Gets the count (number of groups) of this facet entry. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Value Gets the value of this facet entry Declaration public virtual BytesRef Value { get; } Property Value Type Description Lucene.Net.Util.BytesRef Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.GroupedFacetResult.html",
    "title": "Class AbstractGroupFacetCollector.GroupedFacetResult | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. Inheritance System.Object AbstractGroupFacetCollector.GroupedFacetResult Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupedFacetResult Constructors | Improve this Doc View Source GroupedFacetResult(Int32, Int32, Boolean, Int32, Int32) Declaration public GroupedFacetResult(int size, int minCount, bool orderByCount, int totalCount, int totalMissingCount) Parameters Type Name Description System.Int32 size System.Int32 minCount System.Boolean orderByCount System.Int32 totalCount System.Int32 totalMissingCount Properties | Improve this Doc View Source TotalCount Gets the sum of all facet entries counts. Declaration public virtual int TotalCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalMissingCount Gets the number of groups that didn't have a facet value. Declaration public virtual int TotalMissingCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddFacetCount(BytesRef, Int32) Declaration public virtual void AddFacetCount(BytesRef facetValue, int count) Parameters Type Name Description Lucene.Net.Util.BytesRef facetValue System.Int32 count | Improve this Doc View Source GetFacetEntries(Int32, Int32) Returns a list of facet entries to be rendered based on the specified offset and limit. The facet entries are retrieved from the facet entries collected during merging. Declaration public virtual IList<AbstractGroupFacetCollector.FacetEntry> GetFacetEntries(int offset, int limit) Parameters Type Name Description System.Int32 offset The offset in the collected facet entries during merging System.Int32 limit The number of facets to return starting from the offset. Returns Type Description System.Collections.Generic.IList < AbstractGroupFacetCollector.FacetEntry > a list of facet entries to be rendered based on the specified offset and limit"
  },
  "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractGroupFacetCollector.html",
    "title": "Class AbstractGroupFacetCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractGroupFacetCollector : ICollector Constructors | Improve this Doc View Source AbstractGroupFacetCollector(String, String, BytesRef) Declaration protected AbstractGroupFacetCollector(string groupField, string facetField, BytesRef facetPrefix) Parameters Type Name Description System.String groupField System.String facetField Lucene.Net.Util.BytesRef facetPrefix Fields | Improve this Doc View Source m_endFacetOrd Declaration protected int m_endFacetOrd Field Value Type Description System.Int32 | Improve this Doc View Source m_facetField Declaration protected readonly string m_facetField Field Value Type Description System.String | Improve this Doc View Source m_facetPrefix Declaration protected readonly BytesRef m_facetPrefix Field Value Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source m_groupField Declaration protected readonly string m_groupField Field Value Type Description System.String | Improve this Doc View Source m_segmentFacetCounts Declaration protected int[] m_segmentFacetCounts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_segmentResults Declaration protected readonly IList<AbstractGroupFacetCollector.AbstractSegmentResult> m_segmentResults Field Value Type Description System.Collections.Generic.IList < AbstractGroupFacetCollector.AbstractSegmentResult > | Improve this Doc View Source m_segmentTotalCount Declaration protected int m_segmentTotalCount Field Value Type Description System.Int32 | Improve this Doc View Source m_startFacetOrd Declaration protected int m_startFacetOrd Field Value Type Description System.Int32 Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public abstract void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateSegmentResult() Declaration protected abstract AbstractGroupFacetCollector.AbstractSegmentResult CreateSegmentResult() Returns Type Description AbstractGroupFacetCollector.AbstractSegmentResult | Improve this Doc View Source MergeSegmentResults(Int32, Int32, Boolean) Returns grouped facet results that were computed over zero or more segments. Grouped facet counts are merged from zero or more segment results. Declaration public virtual AbstractGroupFacetCollector.GroupedFacetResult MergeSegmentResults(int size, int minCount, bool orderByCount) Parameters Type Name Description System.Int32 size The total number of facets to include. This is typically offset + limit System.Int32 minCount The minimum count a facet entry should have to be included in the grouped facet result System.Boolean orderByCount Whether to sort the facet entries by facet entry count. If false then the facets are sorted lexicographically in ascending order. Returns Type Description AbstractGroupFacetCollector.GroupedFacetResult grouped facet results Exceptions Type Condition System.IO.IOException If I/O related errors occur during merging segment grouped facet counts. | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public abstract void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.html",
    "title": "Class AbstractSecondPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. Inheritance System.Object AbstractSecondPassGroupingCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public static class AbstractSecondPassGroupingCollector"
  },
  "Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector.SearchGroupDocs-1.html",
    "title": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inheritance System.Object AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source SearchGroupDocs(TGroupValue, ITopDocsCollector) Declaration public SearchGroupDocs(TGroupValue groupValue, ITopDocsCollector collector) Parameters Type Name Description TGroupValue groupValue Lucene.Net.Search.ITopDocsCollector collector Properties | Improve this Doc View Source Collector Declaration public ITopDocsCollector Collector { get; } Property Value Type Description Lucene.Net.Search.ITopDocsCollector | Improve this Doc View Source GroupValue Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue"
  },
  "Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector-1.html",
    "title": "Class AbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. 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. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector<TGroupValue> FunctionSecondPassGroupingCollector TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector <TGroupValue> Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public abstract class AbstractSecondPassGroupingCollector<TGroupValue> : IAbstractSecondPassGroupingCollector<TGroupValue>, ICollector Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration protected AbstractSecondPassGroupingCollector(IEnumerable<ISearchGroup<TGroupValue>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> groups Lucene.Net.Search.Sort groupSort Lucene.Net.Search.Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Fields | Improve this Doc View Source m_groupDocs Declaration protected AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>[] m_groupDocs Field Value Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>[] | Improve this Doc View Source m_groupMap Declaration protected readonly IDictionary<TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue>> m_groupMap Field Value Type Description System.Collections.Generic.IDictionary <TGroupValue, AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue>> Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Int32) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue> | Improve this Doc View Source RetrieveGroup(Int32) Returns the group the specified doc belongs to or null if no group could be retrieved. Declaration protected abstract AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc The specified doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs <TGroupValue> the group the specified doc belongs to or null if no group could be retrieved Exceptions Type Condition System.IO.IOException If an I/O related error occurred | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements IAbstractSecondPassGroupingCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.BlockGroupingCollector.html": {
    "href": "Lucene.Net.Search.Grouping.BlockGroupingCollector.html",
    "title": "Class BlockGroupingCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object BlockGroupingCollector Implements Lucene.Net.Search.ICollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class BlockGroupingCollector : ICollector Constructors | Improve this Doc View Source BlockGroupingCollector(Sort, Int32, Boolean, Filter) Create the single pass collector. Declaration public BlockGroupingCollector(Sort groupSort, int topNGroups, bool needsScores, Filter lastDocPerGroup) Parameters Type Name Description Lucene.Net.Search.Sort groupSort The Lucene.Net.Search.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 RELEVANCE . System.Int32 topNGroups How many top groups to keep. System.Boolean needsScores true if the collected documents require scores, either because relevance is included in the withinGroupSort or because you plan to pass true for either GetScores or GetMaxScores to GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Lucene.Net.Search.Filter lastDocPerGroup a Lucene.Net.Search.Filter that marks the last document in each group. Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public virtual bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public virtual void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source GetTopGroups(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<object> GetTopGroups(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Lucene.Net.Search.Sort withinGroupSort The Lucene.Net.Search.Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups < System.Object > | Improve this Doc View Source GetTopGroups<TGroupValue>(Sort, Int32, Int32, Int32, Boolean) Returns the grouped results. Returns null if the number of groups collected is <= groupOffset. NOTE : This collector is unable to compute the groupValue per group so it will always be null. This is normally not a problem, as you can obtain the value just like you obtain other values for each matching document (eg, via stored fields, via FieldCache, etc.) Declaration public virtual ITopGroups<TGroupValue> GetTopGroups<TGroupValue>(Sort withinGroupSort, int groupOffset, int withinGroupOffset, int maxDocsPerGroup, bool fillSortFields) Parameters Type Name Description Lucene.Net.Search.Sort withinGroupSort The Lucene.Net.Search.Sort used to sort documents within each group. Passing null is allowed, to sort by relevance. System.Int32 groupOffset Which group to start from System.Int32 withinGroupOffset Which document to start from within each group System.Int32 maxDocsPerGroup How many top documents to keep within each group. System.Boolean fillSortFields If true then the Comparable values for the sort fields will be set Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue The expected return type for group value | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public virtual void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public virtual void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html": {
    "href": "Lucene.Net.Search.Grouping.CollectedSearchGroup-1.html",
    "title": "Class CollectedSearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object SearchGroup <TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> ICollectedSearchGroup Inherited Members SearchGroup<TGroupValue>.GroupValue SearchGroup<TGroupValue>.SortValues SearchGroup<TGroupValue>.ToString() SearchGroup<TGroupValue>.Equals(Object) SearchGroup<TGroupValue>.GetHashCode() System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class CollectedSearchGroup<TGroupValue> : SearchGroup<TGroupValue>, ISearchGroup<TGroupValue>, ICollectedSearchGroup Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source ComparerSlot Declaration public int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration public int TopDoc { get; } Property Value Type Description System.Int32 Implements ISearchGroup<TGroupValue> ICollectedSearchGroup"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead.html",
    "title": "Class FunctionAllGroupHeadsCollector.GroupHead | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector_GroupHead FunctionAllGroupHeadsCollector.GroupHead Inherited Members AbstractAllGroupHeadsCollector_GroupHead.Doc System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupHead : AbstractAllGroupHeadsCollector_GroupHead Properties | Improve this Doc View Source GroupValue Declaration public MutableValue GroupValue { get; } Property Value Type Description Lucene.Net.Util.Mutable.MutableValue Methods | Improve this Doc View Source Compare(Int32, Int32) Declaration public override int Compare(int compIDX, int doc) Parameters Type Name Description System.Int32 compIDX System.Int32 doc Returns Type Description System.Int32 Overrides AbstractAllGroupHeadsCollector_GroupHead.Compare(Int32, Int32) | Improve this Doc View Source UpdateDocHead(Int32) Declaration public override void UpdateDocHead(int doc) Parameters Type Name Description System.Int32 doc Overrides AbstractAllGroupHeadsCollector_GroupHead.UpdateDocHead(Int32)"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.html",
    "title": "Class FunctionAllGroupHeadsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by Lucene.Net.Queries.Function.ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector < FunctionAllGroupHeadsCollector.GroupHead > FunctionAllGroupHeadsCollector Implements Lucene.Net.Search.ICollector Inherited Members AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_reversed AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_compIDXEnd AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.m_temporalResult AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.GroupHeadsCount AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.Collect(Int32) AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupHeadsCollector : AbstractAllGroupHeadsCollector<FunctionAllGroupHeadsCollector.GroupHead>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupHeadsCollector(ValueSource, IDictionary, Sort) Constructs a FunctionAllGroupHeadsCollector instance. Declaration public FunctionAllGroupHeadsCollector(ValueSource groupBy, IDictionary vsContext, Sort sortWithinGroup) Parameters Type Name Description Lucene.Net.Queries.Function.ValueSource groupBy The Lucene.Net.Queries.Function.ValueSource to group by System.Collections.IDictionary vsContext The Lucene.Net.Queries.Function.ValueSource context Lucene.Net.Search.Sort sortWithinGroup The sort within a group Properties | Improve this Doc View Source CollectedGroupHeads Declaration protected override ICollection<FunctionAllGroupHeadsCollector.GroupHead> CollectedGroupHeads { get; } Property Value Type Description System.Collections.Generic.ICollection < FunctionAllGroupHeadsCollector.GroupHead > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.CollectedGroupHeads Methods | Improve this Doc View Source RetrieveGroupHeadAndAddIfNotExist(Int32) Declaration protected override void RetrieveGroupHeadAndAddIfNotExist(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupHeadsCollector<Lucene.Net.Search.Grouping.Function.FunctionAllGroupHeadsCollector.GroupHead>.RetrieveGroupHeadAndAddIfNotExist(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) | Improve this Doc View Source SetScorer(Scorer) Declaration public override void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Overrides AbstractAllGroupHeadsCollector.SetScorer(Scorer) Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionAllGroupsCollector.html",
    "title": "Class FunctionAllGroupsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses Lucene.Net.Queries.Function.ValueSource and Lucene.Net.Queries.Function.FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < Lucene.Net.Util.Mutable.MutableValue > FunctionAllGroupsCollector Implements IAbstractAllGroupsCollector < Lucene.Net.Util.Mutable.MutableValue > Lucene.Net.Search.ICollector Inherited Members AbstractAllGroupsCollector<MutableValue>.GroupCount AbstractAllGroupsCollector<MutableValue>.SetScorer(Scorer) AbstractAllGroupsCollector<MutableValue>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionAllGroupsCollector : AbstractAllGroupsCollector<MutableValue>, IAbstractAllGroupsCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionAllGroupsCollector(ValueSource, IDictionary) Constructs a FunctionAllGroupsCollector instance. Declaration public FunctionAllGroupsCollector(ValueSource groupBy, IDictionary vsContext) Parameters Type Name Description Lucene.Net.Queries.Function.ValueSource groupBy The Lucene.Net.Queries.Function.ValueSource to group by System.Collections.IDictionary vsContext The Lucene.Net.Queries.Function.ValueSource context Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<MutableValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < Lucene.Net.Util.Mutable.MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount.html",
    "title": "Class FunctionDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < Lucene.Net.Util.Mutable.MutableValue > FunctionDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < Lucene.Net.Util.Mutable.MutableValue > Inherited Members AbstractDistinctValuesCollector.GroupCount<MutableValue>.GroupValue AbstractDistinctValuesCollector.GroupCount<MutableValue>.UniqueValues System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<MutableValue>, AbstractDistinctValuesCollector.IGroupCount<MutableValue> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.html",
    "title": "Class FunctionDistinctValuesCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > FunctionDistinctValuesCollector Implements IAbstractDistinctValuesCollector < FunctionDistinctValuesCollector.GroupCount > Lucene.Net.Search.ICollector Inherited Members AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionDistinctValuesCollector : AbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<FunctionDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source FunctionDistinctValuesCollector(IDictionary, ValueSource, ValueSource, IEnumerable<ISearchGroup<MutableValue>>) Declaration public FunctionDistinctValuesCollector(IDictionary vsContext, ValueSource groupSource, ValueSource countSource, IEnumerable<ISearchGroup<MutableValue>> groups) Parameters Type Name Description System.Collections.IDictionary vsContext Lucene.Net.Queries.Function.ValueSource groupSource Lucene.Net.Queries.Function.ValueSource countSource System.Collections.Generic.IEnumerable < ISearchGroup < Lucene.Net.Util.Mutable.MutableValue >> groups Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<FunctionDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < FunctionDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Function.FunctionDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionFirstPassGroupingCollector.html",
    "title": "Class FunctionFirstPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on Lucene.Net.Queries.Function.ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < Lucene.Net.Util.Mutable.MutableValue > FunctionFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < Lucene.Net.Util.Mutable.MutableValue > Lucene.Net.Search.ICollector Inherited Members AbstractFirstPassGroupingCollector<MutableValue>.m_orderedGroups AbstractFirstPassGroupingCollector<MutableValue>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<MutableValue>.Collect(Int32) AbstractFirstPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<MutableValue>, IAbstractFirstPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionFirstPassGroupingCollector(ValueSource, IDictionary, Sort, Int32) Creates a first pass collector. Declaration public FunctionFirstPassGroupingCollector(ValueSource groupByVS, IDictionary vsContext, Sort groupSort, int topNGroups) Parameters Type Name Description Lucene.Net.Queries.Function.ValueSource groupByVS The Lucene.Net.Queries.Function.ValueSource instance to group by System.Collections.IDictionary vsContext The Lucene.Net.Queries.Function.ValueSource context Lucene.Net.Search.Sort groupSort The Lucene.Net.Search.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 RELEVANCE . System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source CopyDocGroupValue(MutableValue, MutableValue) Declaration protected override MutableValue CopyDocGroupValue(MutableValue groupValue, MutableValue reuse) Parameters Type Name Description Lucene.Net.Util.Mutable.MutableValue groupValue Lucene.Net.Util.Mutable.MutableValue reuse Returns Type Description Lucene.Net.Util.Mutable.MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.CopyDocGroupValue(Lucene.Net.Util.Mutable.MutableValue, Lucene.Net.Util.Mutable.MutableValue) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override MutableValue GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Lucene.Net.Util.Mutable.MutableValue Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Function.FunctionSecondPassGroupingCollector.html",
    "title": "Class FunctionSecondPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on Lucene.Net.Queries.Function.ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < Lucene.Net.Util.Mutable.MutableValue > FunctionSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < Lucene.Net.Util.Mutable.MutableValue > Lucene.Net.Search.ICollector Inherited Members AbstractSecondPassGroupingCollector<MutableValue>.m_groupMap AbstractSecondPassGroupingCollector<MutableValue>.m_groupDocs AbstractSecondPassGroupingCollector<MutableValue>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<MutableValue>.Collect(Int32) AbstractSecondPassGroupingCollector<MutableValue>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<MutableValue>.GetTopGroups(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Function Assembly : Lucene.Net.Grouping.dll Syntax public class FunctionSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<MutableValue>, IAbstractSecondPassGroupingCollector<MutableValue>, ICollector Constructors | Improve this Doc View Source FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>>, Sort, Sort, Int32, Boolean, Boolean, Boolean, ValueSource, IDictionary) Constructs a FunctionSecondPassGroupingCollector instance. Declaration public FunctionSecondPassGroupingCollector(IEnumerable<ISearchGroup<MutableValue>> searchGroups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields, ValueSource groupByVS, IDictionary vsContext) Parameters Type Name Description System.Collections.Generic.IEnumerable < ISearchGroup < Lucene.Net.Util.Mutable.MutableValue >> searchGroups The SearchGroup<TGroupValue> instances collected during the first phase. Lucene.Net.Search.Sort groupSort The group sort Lucene.Net.Search.Sort withinGroupSort The sort inside a group System.Int32 maxDocsPerGroup The maximum number of documents to collect inside a group System.Boolean getScores Whether to include the scores System.Boolean getMaxScores Whether to include the maximum score System.Boolean fillSortFields Whether to fill the sort values in WithinGroupSort Lucene.Net.Queries.Function.ValueSource groupByVS The Lucene.Net.Queries.Function.ValueSource to group by System.Collections.IDictionary vsContext The value source context Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<MutableValue> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < Lucene.Net.Util.Mutable.MutableValue > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.Mutable.MutableValue>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Function.html": {
    "href": "Lucene.Net.Search.Grouping.Function.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Function | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Function <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for grouping by <xref:Lucene.Net.Queries.Function.ValueSource>. Classes FunctionAllGroupHeadsCollector An implementation of AbstractAllGroupHeadsCollector for retrieving the most relevant groups when grouping by Lucene.Net.Queries.Function.ValueSource . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupHeadsCollector.GroupHead Holds current head document for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: Uses Lucene.Net.Queries.Function.ValueSource and Lucene.Net.Queries.Function.FunctionValues to retrieve the field values to group by. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector Function based implementation of AbstractDistinctValuesCollector . This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on Lucene.Net.Queries.Function.ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FunctionSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on Lucene.Net.Queries.Function.ValueSource instances. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Search.Grouping.GroupDocs-1.html": {
    "href": "Lucene.Net.Search.Grouping.GroupDocs-1.html",
    "title": "Class GroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class GroupDocs<TGroupValue> Represents one group in the results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GroupDocs<TGroupValue> Implements IGroupDocs <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupDocs<TGroupValue> : IGroupDocs<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source GroupDocs(Single, Single, Int32, ScoreDoc[], TGroupValue, Object[]) Declaration public GroupDocs(float score, float maxScore, int totalHits, ScoreDoc[] scoreDocs, TGroupValue groupValue, object[] groupSortValues) Parameters Type Name Description System.Single score System.Single maxScore System.Int32 totalHits ScoreDoc [] scoreDocs TGroupValue groupValue System.Object [] groupSortValues Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration public object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration public TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration public float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration public ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration public int TotalHits { get; } Property Value Type Description System.Int32 Implements IGroupDocs<TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.GroupingSearch.html": {
    "href": "Lucene.Net.Search.Grouping.GroupingSearch.html",
    "title": "Class GroupingSearch | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object GroupingSearch Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class GroupingSearch Constructors | Improve this Doc View Source GroupingSearch(ValueSource, IDictionary) Constructs a GroupingSearch instance that groups documents by function using a Lucene.Net.Queries.Function.ValueSource instance. Declaration public GroupingSearch(ValueSource groupFunction, IDictionary valueSourceContext) Parameters Type Name Description Lucene.Net.Queries.Function.ValueSource groupFunction The function to group by specified as Lucene.Net.Queries.Function.ValueSource System.Collections.IDictionary valueSourceContext The context of the specified groupFunction | Improve this Doc View Source GroupingSearch(Filter) Constructor for grouping documents by doc block. This constructor can only be used when documents belonging in a group are indexed in one block. Declaration public GroupingSearch(Filter groupEndDocs) Parameters Type Name Description Lucene.Net.Search.Filter groupEndDocs The filter that marks the last document in all doc blocks | Improve this Doc View Source GroupingSearch(String) Constructs a GroupingSearch instance that groups documents by index terms using the FieldCache . The group field can only have one token per document. This means that the field must not be analysed. Declaration public GroupingSearch(string groupField) Parameters Type Name Description System.String groupField The name of the field to group by. Methods | Improve this Doc View Source DisableCaching() Disables any enabled cache. Declaration public virtual GroupingSearch DisableCaching() Returns Type Description GroupingSearch this | Improve this Doc View Source GetAllGroupHeads() Returns the matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set. Declaration public virtual IBits GetAllGroupHeads() Returns Type Description Lucene.Net.Util.IBits The matching group heads if SetAllGroupHeads(Boolean) was set to true or an empty bit set | Improve this Doc View Source GetAllMatchingGroups() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection GetAllMatchingGroups() Returns Type Description System.Collections.ICollection all matching groups are returned, or an empty collection Remarks LUCENENET specific used to get the groups if the type is unknown or if the code expects any type, since GetAllMatchingGroups<T>() will throw an exception if the return type is incorrect. | Improve this Doc View Source GetAllMatchingGroups<T>() If SetAllGroups(Boolean) was set to true then all matching groups are returned, otherwise an empty collection is returned. Declaration public virtual ICollection<T> GetAllMatchingGroups<T>() Returns Type Description System.Collections.Generic.ICollection <T> all matching groups are returned, or an empty collection Type Parameters Name Description T The group value type. This can be a Lucene.Net.Util.BytesRef or a Lucene.Net.Util.Mutable.MutableValue instance. If grouping by doc block this the group value is always null . | Improve this Doc View Source GroupByDocBlock<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByDocBlock<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.Filter filter Lucene.Net.Search.Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source GroupByFieldOrFunction<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Declaration protected virtual ITopGroups<TGroupValue> GroupByFieldOrFunction<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.Filter filter Lucene.Net.Search.Query query System.Int32 groupOffset System.Int32 groupLimit Returns Type Description ITopGroups <TGroupValue> Type Parameters Name Description TGroupValue | Improve this Doc View Source Search(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher The Lucene.Net.Search.IndexSearcher instance to execute the grouped search on. Lucene.Net.Search.Filter filter The filter to execute with the grouping Lucene.Net.Search.Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<object> Search(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher The Lucene.Net.Search.IndexSearcher instance to execute the grouped search on. Lucene.Net.Search.Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups < System.Object > the grouped result as a ITopGroups<TGroupValue> instance Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Filter, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Filter filter, Query query, int groupOffset, int groupLimit) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher The Lucene.Net.Search.IndexSearcher instance to execute the grouped search on. Lucene.Net.Search.Filter filter The filter to execute with the grouping Lucene.Net.Search.Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source Search<TGroupValue>(IndexSearcher, Query, Int32, Int32) Executes a grouped search. Both the first pass and second pass are executed on the specified searcher. Declaration public virtual ITopGroups<TGroupValue> Search<TGroupValue>(IndexSearcher searcher, Query query, int groupOffset, int groupLimit) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher The Lucene.Net.Search.IndexSearcher instance to execute the grouped search on. Lucene.Net.Search.Query query The query to execute with the grouping System.Int32 groupOffset The group offset System.Int32 groupLimit The number of groups to return from the specified group offset Returns Type Description ITopGroups <TGroupValue> the grouped result as a ITopGroups<TGroupValue> instance Type Parameters Name Description TGroupValue The expected return type of the search. Exceptions Type Condition System.IO.IOException If any I/O related errors occur | Improve this Doc View Source SetAllGroupHeads(Boolean) Whether to compute all group heads (most relevant document per group) matching the query. This feature isn't enabled when grouping by doc block. Declaration public virtual GroupingSearch SetAllGroupHeads(bool allGroupHeads) Parameters Type Name Description System.Boolean allGroupHeads Whether to compute all group heads (most relevant document per group) matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetAllGroups(Boolean) Whether to also compute all groups matching the query. This can be used to determine the number of groups, which can be used for accurate pagination. When grouping by doc block the number of groups are automatically included in the TopGroups and this option doesn't have any influence. Declaration public virtual GroupingSearch SetAllGroups(bool allGroups) Parameters Type Name Description System.Boolean allGroups to also compute all groups matching the query Returns Type Description GroupingSearch this | Improve this Doc View Source SetCaching(Int32, Boolean) Enables caching for the second pass search. The cache will not contain more than the maximum specified documents. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCaching(int maxDocsToCache, bool cacheScores) Parameters Type Name Description System.Int32 maxDocsToCache The maximum number of documents the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetCachingInMB(Double, Boolean) Enables caching for the second pass search. The cache will not grow over a specified limit in MB. The cache is filled during the first pass searched and then replayed during the second pass searched. If the cache grows beyond the specified limit, then the cache is purged and not used in the second pass search. Declaration public virtual GroupingSearch SetCachingInMB(double maxCacheRAMMB, bool cacheScores) Parameters Type Name Description System.Double maxCacheRAMMB The maximum amount in MB the cache is allowed to hold System.Boolean cacheScores Whether to cache the scores Returns Type Description GroupingSearch this | Improve this Doc View Source SetFillSortFields(Boolean) Whether to also fill the sort fields per returned group and groups docs. Declaration public virtual GroupingSearch SetFillSortFields(bool fillSortFields) Parameters Type Name Description System.Boolean fillSortFields Whether to also fill the sort fields per returned group and groups docs Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsLimit(Int32) Specifies the number of documents to return inside a group from the specified groupDocsOffset. Declaration public virtual GroupingSearch SetGroupDocsLimit(int groupDocsLimit) Parameters Type Name Description System.Int32 groupDocsLimit The number of documents to return inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupDocsOffset(Int32) Specifies the offset for documents inside a group. Declaration public virtual GroupingSearch SetGroupDocsOffset(int groupDocsOffset) Parameters Type Name Description System.Int32 groupDocsOffset The offset for documents inside a Returns Type Description GroupingSearch this | Improve this Doc View Source SetGroupSort(Sort) Specifies how groups are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetGroupSort(Sort groupSort) Parameters Type Name Description Lucene.Net.Search.Sort groupSort The sort for the groups. Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeMaxScore(Boolean) Whether to include the score of the most relevant document per group. Declaration public virtual GroupingSearch SetIncludeMaxScore(bool includeMaxScore) Parameters Type Name Description System.Boolean includeMaxScore Whether to include the score of the most relevant document per group Returns Type Description GroupingSearch this | Improve this Doc View Source SetIncludeScores(Boolean) Whether to include the scores per doc inside a group. Declaration public virtual GroupingSearch SetIncludeScores(bool includeScores) Parameters Type Name Description System.Boolean includeScores Whether to include the scores per doc inside a group Returns Type Description GroupingSearch this | Improve this Doc View Source SetInitialSize(Int32) Sets the initial size of some internal used data structures. This prevents growing data structures many times. This can improve the performance of the grouping at the cost of more initial RAM. The SetAllGroups(Boolean) and SetAllGroupHeads(Boolean) features use this option. Defaults to 128. Declaration public virtual GroupingSearch SetInitialSize(int initialSize) Parameters Type Name Description System.Int32 initialSize The initial size of some internal used data structures Returns Type Description GroupingSearch this | Improve this Doc View Source SetSortWithinGroup(Sort) Specified how documents inside a group are sorted. Defaults to RELEVANCE . Declaration public virtual GroupingSearch SetSortWithinGroup(Sort sortWithinGroup) Parameters Type Name Description Lucene.Net.Search.Sort sortWithinGroup The sort for documents inside a group Returns Type Description GroupingSearch this"
  },
  "Lucene.Net.Search.Grouping.html": {
    "href": "Lucene.Net.Search.Grouping.html",
    "title": "Namespace Lucene.Net.Search.Grouping | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping Classes AbstractAllGroupHeadsCollector LUCENENET specific class used to reference an AbstractAllGroupHeadsCollector<GH> subclass without refering to its generic closing type. AbstractAllGroupHeadsCollector_GroupHead Represents a group head. A group head is the most relevant document for a particular group. The relevancy is based is usually based on the sort. The group head contains a group value with its associated most relevant document id. AbstractAllGroupHeadsCollector<GH> This collector specializes in collecting the most relevant document (group head) for each group that match the query. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractAllGroupHeadsCollector<GH>.TemporalResult Contains the result of group head retrieval. To prevent new object creations of this class for every collect. AbstractAllGroupsCollector<TGroupValue> A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. This is an abstract version. Concrete implementations define what a group actually is and how it is internally collected. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractDistinctValuesCollector LUCENENET specific class used to nest the AbstractDistinctValuesCollector.GroupCount<TGroupValue> class so it has similar syntax to that in Java Lucene (AbstractDistinctValuesCollector.GroupCount{TGroupValue} rather than AbstractDistinctValuesCollector{GC}.GroupCount{TGroupValue}). AbstractDistinctValuesCollector.GroupCount<TGroupValue> Returned by Groups , representing the value and set of distinct values for the group. AbstractDistinctValuesCollector<GC> A second pass grouping collector that keeps track of distinct values for a specified field for the top N group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractFirstPassGroupingCollector<TGroupValue> 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. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector Base class for computing grouped facets. This is a Lucene.NET EXPERIMENTAL API, use at your own risk AbstractGroupFacetCollector.AbstractSegmentResult Contains the local grouped segment counts for a particular segment. Each AbstractGroupFacetCollector.AbstractSegmentResult must be added together. AbstractGroupFacetCollector.FacetEntry Represents a facet entry with a value and a count. AbstractGroupFacetCollector.GroupedFacetResult The grouped facet result. Containing grouped facet entries, total count and total missing count. AbstractSecondPassGroupingCollector LUCENENET specific class used to simulate the syntax used to access nested classes of AbstractAllGroupHeadsCollector<GH> without referencing the generic closing type. AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> AbstractSecondPassGroupingCollector<TGroupValue> SecondPassGroupingCollector is the second of two passes necessary to collect grouped docs. This pass gathers the top N documents per top group computed from the first pass. 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. This is a Lucene.NET EXPERIMENTAL API, use at your own risk BlockGroupingCollector BlockGroupingCollector performs grouping with a single pass collector, as long as you are grouping by a doc block field, ie all documents sharing a given group value were indexed as a doc block using the atomic AddDocuments(IEnumerable<IEnumerable<IIndexableField>>, Analyzer) or UpdateDocuments(Term, IEnumerable<IEnumerable<IIndexableField>>, Analyzer) API. This results in faster performance (~25% faster QPS) than the two-pass grouping collectors, with the tradeoff being that the documents in each group must always be indexed as a block. This collector also fills in TopGroups.totalGroupCount without requiring the separate TermAllGroupsCollector . However, this collector does not fill in the groupValue of each group; this field will always be null. NOTE : this collector makes no effort to verify the docs were in fact indexed as a block, so it's up to you to ensure this was the case. See org.apache.lucene.search.grouping for more details including a full code example. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollectedSearchGroup<TGroupValue> Expert: representation of a group in AbstractFirstPassGroupingCollector<TGroupValue> , tracking the top doc and FieldComparer slot. This is a Lucene.NET INTERNAL API, use at your own risk GroupDocs<TGroupValue> Represents one group in the results. This is a Lucene.NET EXPERIMENTAL API, use at your own risk GroupingSearch Convenience class to perform grouping in a non distributed environment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) TopGroups<TGroupValue> Represents result returned by a grouping search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces AbstractDistinctValuesCollector.IGroupCount<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Enums TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged."
  },
  "Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.IAbstractAllGroupsCollector-1.html",
    "title": "Interface IAbstractAllGroupsCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IAbstractAllGroupsCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue Inherited Members Lucene.Net.Search.ICollector.SetScorer(Lucene.Net.Search.Scorer) ICollector.Collect(Int32) Lucene.Net.Search.ICollector.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Lucene.Net.Search.ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractAllGroupsCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupCount Returns the total number of groups for the executed search. This is a convenience method. The following code snippet has the same effect: GetGroups().Count Declaration int GroupCount { get; } Property Value Type Description System.Int32 The total number of groups for the executed search | Improve this Doc View Source Groups Returns the group values This is an unordered collections of group values. For each group that matched the query there is a Lucene.Net.Util.BytesRef representing a group value. Declaration IEnumerable<TGroupValue> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <TGroupValue> the group values"
  },
  "Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.IAbstractDistinctValuesCollector-1.html",
    "title": "Interface IAbstractDistinctValuesCollector<GC> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IAbstractDistinctValuesCollector<GC> LUCENENET specific interface used to apply covariance to GC Inherited Members Lucene.Net.Search.ICollector.SetScorer(Lucene.Net.Search.Scorer) ICollector.Collect(Int32) Lucene.Net.Search.ICollector.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Lucene.Net.Search.ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractDistinctValuesCollector<out GC> : ICollector Type Parameters Name Description GC Properties | Improve this Doc View Source Groups Returns all unique values for each top N group. Declaration IEnumerable<GC> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable <GC> all unique values for each top N group"
  },
  "Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.IAbstractFirstPassGroupingCollector-1.html",
    "title": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IAbstractFirstPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members Lucene.Net.Search.ICollector.SetScorer(Lucene.Net.Search.Scorer) ICollector.Collect(Int32) Lucene.Net.Search.ICollector.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Lucene.Net.Search.ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractFirstPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32, Boolean) 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. Declaration IEnumerable<ISearchGroup<TGroupValue>> GetTopGroups(int groupOffset, bool fillFields) Parameters Type Name Description System.Int32 groupOffset The offset in the collected groups System.Boolean fillFields Whether to fill to SortValues Returns Type Description System.Collections.Generic.IEnumerable < ISearchGroup <TGroupValue>> top groups, starting from offset Remarks LUCENENET NOTE: We must use System.Collections.Generic.IEnumerable<T> rather than System.Collections.Generic.ICollection<T> here because we need this to be covariant"
  },
  "Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.IAbstractSecondPassGroupingCollector-1.html",
    "title": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IAbstractSecondPassGroupingCollector<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Inherited Members Lucene.Net.Search.ICollector.SetScorer(Lucene.Net.Search.Scorer) ICollector.Collect(Int32) Lucene.Net.Search.ICollector.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Lucene.Net.Search.ICollector.AcceptsDocsOutOfOrder Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IAbstractSecondPassGroupingCollector<out TGroupValue> : ICollector Type Parameters Name Description TGroupValue Methods | Improve this Doc View Source GetTopGroups(Int32) Declaration ITopGroups<TGroupValue> GetTopGroups(int withinGroupOffset) Parameters Type Name Description System.Int32 withinGroupOffset Returns Type Description ITopGroups <TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.ICollectedSearchGroup.html": {
    "href": "Lucene.Net.Search.Grouping.ICollectedSearchGroup.html",
    "title": "Interface ICollectedSearchGroup | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface ICollectedSearchGroup LUCENENET specific interface for passing/comparing the CollectedSearchGroup without referencing its generic closing type Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ICollectedSearchGroup Properties | Improve this Doc View Source ComparerSlot Declaration int ComparerSlot { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TopDoc Declaration int TopDoc { get; } Property Value Type Description System.Int32"
  },
  "Lucene.Net.Search.Grouping.IGroupDocs-1.html": {
    "href": "Lucene.Net.Search.Grouping.IGroupDocs-1.html",
    "title": "Interface IGroupDocs<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IGroupDocs<TGroupValue> LUCENENET specific interface used to apply covariance to TGroupValue to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface IGroupDocs<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupSortValues Matches the groupSort passed to AbstractFirstPassGroupingCollector<TGroupValue> . Declaration object[] GroupSortValues { get; } Property Value Type Description System.Object [] | Improve this Doc View Source GroupValue The groupField value for all docs in this group; this may be null if hits did not have the groupField. Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source MaxScore Max score in this group Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source Score Overall aggregated score of this group (currently only set by join queries). Declaration float Score { get; } Property Value Type Description System.Single | Improve this Doc View Source ScoreDocs Hits; this may be FieldDoc instances if the withinGroupSort sorted by fields. Declaration ScoreDoc[] ScoreDocs { get; } Property Value Type Description ScoreDoc [] | Improve this Doc View Source TotalHits Total hits within this group Declaration int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "Lucene.Net.Search.Grouping.ISearchGroup-1.html": {
    "href": "Lucene.Net.Search.Grouping.ISearchGroup-1.html",
    "title": "Interface ISearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface ISearchGroup<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ISearchGroup<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration TGroupValue GroupValue { get; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration object[] SortValues { get; set; } Property Value Type Description System.Object []"
  },
  "Lucene.Net.Search.Grouping.ITopGroups-1.html": {
    "href": "Lucene.Net.Search.Grouping.ITopGroups-1.html",
    "title": "Interface ITopGroups<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface ITopGroups<TGroupValue> LUCENENET specific interface used to provide covariance with the TGroupValue type to simulate Java's wildcard generics. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public interface ITopGroups<out TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or System.Single.NaN if scores were not computed. Declaration float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration SortField[] WithinGroupSort { get; } Property Value Type Description SortField []"
  },
  "Lucene.Net.Search.Grouping.SearchGroup.html": {
    "href": "Lucene.Net.Search.Grouping.SearchGroup.html",
    "title": "Class SearchGroup | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SearchGroup LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of SearchGroup<TGroupValue> ) Inheritance System.Object SearchGroup Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public static class SearchGroup Methods | Improve this Doc View Source Merge<T>(IList<IEnumerable<ISearchGroup<T>>>, Int32, Int32, Sort) Merges multiple collections of top groups, for example obtained from separate index shards. The provided groupSort must match how the groups were sorted, and the provided SearchGroups must have been computed with fillFields=true passed to GetTopGroups(Int32, Boolean) . NOTE: this returns null if the topGroups is empty. Declaration public static ICollection<SearchGroup<T>> Merge<T>(IList<IEnumerable<ISearchGroup<T>>> topGroups, int offset, int topN, Sort groupSort) Parameters Type Name Description System.Collections.Generic.IList < System.Collections.Generic.IEnumerable < ISearchGroup <T>>> topGroups System.Int32 offset System.Int32 topN Lucene.Net.Search.Sort groupSort Returns Type Description System.Collections.Generic.ICollection < SearchGroup <T>> Type Parameters Name Description T"
  },
  "Lucene.Net.Search.Grouping.SearchGroup-1.html": {
    "href": "Lucene.Net.Search.Grouping.SearchGroup-1.html",
    "title": "Class SearchGroup<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SearchGroup<TGroupValue> Represents a group that is found during the first pass search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SearchGroup<TGroupValue> CollectedSearchGroup<TGroupValue> Implements ISearchGroup <TGroupValue> Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class SearchGroup<TGroupValue> : ISearchGroup<TGroupValue> Type Parameters Name Description TGroupValue Properties | Improve this Doc View Source GroupValue The value that defines this group Declaration public TGroupValue GroupValue { get; set; } Property Value Type Description TGroupValue | Improve this Doc View Source SortValues The sort values used during sorting. These are the groupSort field values of the highest rank document (by the groupSort) within the group. Can be null if fillFields=false had been passed to GetTopGroups(Int32, Boolean) Declaration public object[] SortValues { get; set; } Property Value Type Description System.Object [] Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object o) Parameters Type Name Description System.Object o Returns Type Description System.Boolean Overrides System.Object.Equals(System.Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides System.Object.GetHashCode() | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Implements ISearchGroup<TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.Terms.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.html",
    "title": "Namespace Lucene.Net.Search.Grouping.Terms | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Search.Grouping.Terms <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Support for grouping by indexed terms via FieldCache . Classes TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector.html",
    "title": "Class TermAllGroupHeadsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector LUCENENET specific class used to mimic the synatax used to access static members of TermAllGroupHeadsCollector<GH> without specifying its generic closing type. (TermAllGroupHeadsCollector.Create() rather than TermAllGroupHeadsCollector{GH}.Create()). Inheritance System.Object TermAllGroupHeadsCollector Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public static class TermAllGroupHeadsCollector Methods | Improve this Doc View Source Create(String, Sort) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Delegates to Create(String, Sort, Int32) with an initialSize of 128. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup) Parameters Type Name Description System.String groupField The field to group by Lucene.Net.Search.Sort sortWithinGroup The sort within each group Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments | Improve this Doc View Source Create(String, Sort, Int32) Creates an AbstractAllGroupHeadsCollector instance based on the supplied arguments. This factory method decides with implementation is best suited. Declaration public static AbstractAllGroupHeadsCollector Create(string groupField, Sort sortWithinGroup, int initialSize) Parameters Type Name Description System.String groupField The field to group by Lucene.Net.Search.Sort sortWithinGroup The sort within each group System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description AbstractAllGroupHeadsCollector an AbstractAllGroupHeadsCollector instance based on the supplied arguments"
  },
  "Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermAllGroupHeadsCollector-1.html",
    "title": "Class TermAllGroupHeadsCollector<GH> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermAllGroupHeadsCollector<GH> A base implementation of AbstractAllGroupHeadsCollector<GH> for retrieving the most relevant groups when grouping on a string based group field. More specifically this all concrete implementations of this base implementation use SortedDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupHeadsCollector AbstractAllGroupHeadsCollector <GH> TermAllGroupHeadsCollector<GH> Implements Lucene.Net.Search.ICollector Inherited Members AbstractAllGroupHeadsCollector<GH>.m_reversed AbstractAllGroupHeadsCollector<GH>.m_compIDXEnd AbstractAllGroupHeadsCollector<GH>.m_temporalResult AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads(Int32) AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeads() AbstractAllGroupHeadsCollector<GH>.GroupHeadsCount AbstractAllGroupHeadsCollector<GH>.RetrieveGroupHeadAndAddIfNotExist(Int32) AbstractAllGroupHeadsCollector<GH>.CollectedGroupHeads AbstractAllGroupHeadsCollector<GH>.Collect(Int32) AbstractAllGroupHeadsCollector<GH>.AcceptsDocsOutOfOrder AbstractAllGroupHeadsCollector.SetScorer(Scorer) AbstractAllGroupHeadsCollector.SetNextReader(AtomicReaderContext) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermAllGroupHeadsCollector<GH> : AbstractAllGroupHeadsCollector<GH>, ICollector where GH : AbstractAllGroupHeadsCollector_GroupHead Type Parameters Name Description GH Constructors | Improve this Doc View Source TermAllGroupHeadsCollector(String, Int32) Declaration protected TermAllGroupHeadsCollector(string groupField, int numberOfSorts) Parameters Type Name Description System.String groupField System.Int32 numberOfSorts Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermAllGroupsCollector.html",
    "title": "Class TermAllGroupsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermAllGroupsCollector A collector that collects all groups that match the query. Only the group value is collected, and the order is undefined. This collector does not determine the most relevant document of a group. Implementation detail: an int hash set (SentinelIntSet) is used to detect if a group is already added to the total count. For each segment the int set is cleared and filled with previous counted groups that occur in the new segment. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractAllGroupsCollector < Lucene.Net.Util.BytesRef > TermAllGroupsCollector Implements IAbstractAllGroupsCollector < Lucene.Net.Util.BytesRef > Lucene.Net.Search.ICollector Inherited Members AbstractAllGroupsCollector<BytesRef>.GroupCount AbstractAllGroupsCollector<BytesRef>.SetScorer(Scorer) AbstractAllGroupsCollector<BytesRef>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermAllGroupsCollector : AbstractAllGroupsCollector<BytesRef>, IAbstractAllGroupsCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermAllGroupsCollector(String) Constructs a AbstractAllGroupsCollector<TGroupValue> . This sets the initial allocation size for the internal int set and group list to 128. Declaration public TermAllGroupsCollector(string groupField) Parameters Type Name Description System.String groupField The field to group by | Improve this Doc View Source TermAllGroupsCollector(String, Int32) Expert: Constructs a AbstractAllGroupsCollector<TGroupValue> Declaration public TermAllGroupsCollector(string groupField, int initialSize) Parameters Type Name Description System.String groupField The field to group by System.Int32 initialSize The initial allocation size of the internal int set and group list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<BytesRef> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < Lucene.Net.Util.BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractAllGroupsCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractAllGroupsCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount.html",
    "title": "Class TermDistinctValuesCollector.GroupCount | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermDistinctValuesCollector.GroupCount Holds distinct values for a single group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector.GroupCount < Lucene.Net.Util.BytesRef > TermDistinctValuesCollector.GroupCount Implements AbstractDistinctValuesCollector.IGroupCount < Lucene.Net.Util.BytesRef > Inherited Members AbstractDistinctValuesCollector.GroupCount<BytesRef>.GroupValue AbstractDistinctValuesCollector.GroupCount<BytesRef>.UniqueValues System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class GroupCount : AbstractDistinctValuesCollector.GroupCount<BytesRef>, AbstractDistinctValuesCollector.IGroupCount<BytesRef> Implements AbstractDistinctValuesCollector.IGroupCount<TGroupValue>"
  },
  "Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.html",
    "title": "Class TermDistinctValuesCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermDistinctValuesCollector A term based implementation of AbstractDistinctValuesCollector{TermDistinctValuesCollector.GroupCount} that relies on SortedDocValues to count the distinct values per group. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > TermDistinctValuesCollector Implements IAbstractDistinctValuesCollector < TermDistinctValuesCollector.GroupCount > Lucene.Net.Search.ICollector Inherited Members AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.AcceptsDocsOutOfOrder AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>.SetScorer(Scorer) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermDistinctValuesCollector : AbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, IAbstractDistinctValuesCollector<TermDistinctValuesCollector.GroupCount>, ICollector Constructors | Improve this Doc View Source TermDistinctValuesCollector(String, String, IEnumerable<ISearchGroup<BytesRef>>) Constructs TermDistinctValuesCollector instance. Declaration public TermDistinctValuesCollector(string groupField, string countField, IEnumerable<ISearchGroup<BytesRef>> groups) Parameters Type Name Description System.String groupField The field to group by System.String countField The field to count distinct values for System.Collections.Generic.IEnumerable < ISearchGroup < Lucene.Net.Util.BytesRef >> groups The top N groups, collected during the first phase search Properties | Improve this Doc View Source Groups Declaration public override IEnumerable<TermDistinctValuesCollector.GroupCount> Groups { get; } Property Value Type Description System.Collections.Generic.IEnumerable < TermDistinctValuesCollector.GroupCount > Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Groups Methods | Improve this Doc View Source Collect(Int32) Declaration public override void Collect(int doc) Parameters Type Name Description System.Int32 doc Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.Collect(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractDistinctValuesCollector<Lucene.Net.Search.Grouping.Terms.TermDistinctValuesCollector.GroupCount>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractDistinctValuesCollector<GC> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermFirstPassGroupingCollector.html",
    "title": "Class TermFirstPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermFirstPassGroupingCollector Concrete implementation of AbstractFirstPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect groups. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractFirstPassGroupingCollector < Lucene.Net.Util.BytesRef > TermFirstPassGroupingCollector Implements IAbstractFirstPassGroupingCollector < Lucene.Net.Util.BytesRef > Lucene.Net.Search.ICollector Inherited Members AbstractFirstPassGroupingCollector<BytesRef>.m_orderedGroups AbstractFirstPassGroupingCollector<BytesRef>.GetTopGroups(Int32, Boolean) AbstractFirstPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractFirstPassGroupingCollector<BytesRef>.Collect(Int32) AbstractFirstPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermFirstPassGroupingCollector : AbstractFirstPassGroupingCollector<BytesRef>, IAbstractFirstPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermFirstPassGroupingCollector(String, Sort, Int32) Create the first pass collector. Declaration public TermFirstPassGroupingCollector(string groupField, Sort groupSort, int topNGroups) Parameters Type Name Description System.String groupField The field used to group documents. This field must be single-valued and indexed ( FieldCache is used to access its value per-document). Lucene.Net.Search.Sort groupSort The Lucene.Net.Search.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 RELEVANCE . System.Int32 topNGroups How many top groups to keep. Exceptions Type Condition System.IO.IOException When I/O related errors occur Methods | Improve this Doc View Source CopyDocGroupValue(BytesRef, BytesRef) Declaration protected override BytesRef CopyDocGroupValue(BytesRef groupValue, BytesRef reuse) Parameters Type Name Description Lucene.Net.Util.BytesRef groupValue Lucene.Net.Util.BytesRef reuse Returns Type Description Lucene.Net.Util.BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.CopyDocGroupValue(Lucene.Net.Util.BytesRef, Lucene.Net.Util.BytesRef) | Improve this Doc View Source GetDocGroupValue(Int32) Declaration protected override BytesRef GetDocGroupValue(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description Lucene.Net.Util.BytesRef Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.GetDocGroupValue(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractFirstPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractFirstPassGroupingCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermGroupFacetCollector.html",
    "title": "Class TermGroupFacetCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermGroupFacetCollector An implementation of AbstractGroupFacetCollector that computes grouped facets based on the indexed terms from the FieldCache . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractGroupFacetCollector TermGroupFacetCollector Implements Lucene.Net.Search.ICollector Inherited Members AbstractGroupFacetCollector.m_groupField AbstractGroupFacetCollector.m_facetField AbstractGroupFacetCollector.m_facetPrefix AbstractGroupFacetCollector.m_segmentResults AbstractGroupFacetCollector.m_segmentFacetCounts AbstractGroupFacetCollector.m_segmentTotalCount AbstractGroupFacetCollector.m_startFacetOrd AbstractGroupFacetCollector.m_endFacetOrd AbstractGroupFacetCollector.MergeSegmentResults(Int32, Int32, Boolean) AbstractGroupFacetCollector.CreateSegmentResult() AbstractGroupFacetCollector.SetScorer(Scorer) AbstractGroupFacetCollector.Collect(Int32) AbstractGroupFacetCollector.SetNextReader(AtomicReaderContext) AbstractGroupFacetCollector.AcceptsDocsOutOfOrder System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public abstract class TermGroupFacetCollector : AbstractGroupFacetCollector, ICollector Methods | Improve this Doc View Source CreateTermGroupFacetCollector(String, String, Boolean, BytesRef, Int32) Factory method for creating the right implementation based on the fact whether the facet field contains multiple tokens per documents. Declaration public static TermGroupFacetCollector CreateTermGroupFacetCollector(string groupField, string facetField, bool facetFieldMultivalued, BytesRef facetPrefix, int initialSize) Parameters Type Name Description System.String groupField The group field System.String facetField The facet field System.Boolean facetFieldMultivalued Whether the facet field has multiple tokens per document Lucene.Net.Util.BytesRef facetPrefix The facet prefix a facet entry should start with to be included. System.Int32 initialSize The initial allocation size of the internal int set and group facet list which should roughly match the total number of expected unique groups. Be aware that the heap usage is 4 bytes * initialSize. Returns Type Description TermGroupFacetCollector TermGroupFacetCollector implementation Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html": {
    "href": "Lucene.Net.Search.Grouping.Terms.TermSecondPassGroupingCollector.html",
    "title": "Class TermSecondPassGroupingCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TermSecondPassGroupingCollector Concrete implementation of AbstractSecondPassGroupingCollector<TGroupValue> that groups based on field values and more specifically uses SortedDocValues to collect grouped docs. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object AbstractSecondPassGroupingCollector < Lucene.Net.Util.BytesRef > TermSecondPassGroupingCollector Implements IAbstractSecondPassGroupingCollector < Lucene.Net.Util.BytesRef > Lucene.Net.Search.ICollector Inherited Members AbstractSecondPassGroupingCollector<BytesRef>.m_groupMap AbstractSecondPassGroupingCollector<BytesRef>.m_groupDocs AbstractSecondPassGroupingCollector<BytesRef>.SetScorer(Scorer) AbstractSecondPassGroupingCollector<BytesRef>.Collect(Int32) AbstractSecondPassGroupingCollector<BytesRef>.AcceptsDocsOutOfOrder AbstractSecondPassGroupingCollector<BytesRef>.GetTopGroups(Int32) System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping.Terms Assembly : Lucene.Net.Grouping.dll Syntax public class TermSecondPassGroupingCollector : AbstractSecondPassGroupingCollector<BytesRef>, IAbstractSecondPassGroupingCollector<BytesRef>, ICollector Constructors | Improve this Doc View Source TermSecondPassGroupingCollector(String, IEnumerable<ISearchGroup<BytesRef>>, Sort, Sort, Int32, Boolean, Boolean, Boolean) Declaration public TermSecondPassGroupingCollector(string groupField, IEnumerable<ISearchGroup<BytesRef>> groups, Sort groupSort, Sort withinGroupSort, int maxDocsPerGroup, bool getScores, bool getMaxScores, bool fillSortFields) Parameters Type Name Description System.String groupField System.Collections.Generic.IEnumerable < ISearchGroup < Lucene.Net.Util.BytesRef >> groups Lucene.Net.Search.Sort groupSort Lucene.Net.Search.Sort withinGroupSort System.Int32 maxDocsPerGroup System.Boolean getScores System.Boolean getMaxScores System.Boolean fillSortFields Methods | Improve this Doc View Source RetrieveGroup(Int32) Declaration protected override AbstractSecondPassGroupingCollector.SearchGroupDocs<BytesRef> RetrieveGroup(int doc) Parameters Type Name Description System.Int32 doc Returns Type Description AbstractSecondPassGroupingCollector.SearchGroupDocs < Lucene.Net.Util.BytesRef > Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.RetrieveGroup(System.Int32) | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public override void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Overrides Lucene.Net.Search.Grouping.AbstractSecondPassGroupingCollector<Lucene.Net.Util.BytesRef>.SetNextReader(Lucene.Net.Index.AtomicReaderContext) Implements IAbstractSecondPassGroupingCollector<TGroupValue> Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Search.Grouping.TopGroups.html": {
    "href": "Lucene.Net.Search.Grouping.TopGroups.html",
    "title": "Class TopGroups | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TopGroups LUCENENET specific class used to nest types to mimic the syntax used by Lucene (that is, without specifying the generic closing type of TopGroups<TGroupValue> ) Inheritance System.Object TopGroups Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public static class TopGroups Methods | Improve this Doc View Source Merge<T>(ITopGroups<T>[], Sort, Sort, Int32, Int32, TopGroups.ScoreMergeMode) Merges an array of TopGroups, for example obtained from the second-pass collector across multiple shards. Each TopGroups must have been sorted by the same groupSort and docSort, and the top groups passed to all second-pass collectors must be the same. NOTE : We can't always compute an exact totalGroupCount. Documents belonging to a group may occur on more than one shard and thus the merged totalGroupCount can be higher than the actual totalGroupCount. In this case the totalGroupCount represents a upper bound. If the documents of one group do only reside in one shard then the totalGroupCount is exact. NOTE : the topDocs in each GroupDocs is actually an instance of TopDocsAndShards Declaration public static TopGroups<T> Merge<T>(ITopGroups<T>[] shardGroups, Sort groupSort, Sort docSort, int docOffset, int docTopN, TopGroups.ScoreMergeMode scoreMergeMode) Parameters Type Name Description ITopGroups <T>[] shardGroups Lucene.Net.Search.Sort groupSort Lucene.Net.Search.Sort docSort System.Int32 docOffset System.Int32 docTopN TopGroups.ScoreMergeMode scoreMergeMode Returns Type Description TopGroups <T> Type Parameters Name Description T"
  },
  "Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html": {
    "href": "Lucene.Net.Search.Grouping.TopGroups.ScoreMergeMode.html",
    "title": "Enum TopGroups.ScoreMergeMode | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Enum TopGroups.ScoreMergeMode How the GroupDocs score (if any) should be merged. Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public enum ScoreMergeMode Fields Name Description Avg Avg score across all shards for this group. None Set score to Float.NaN Total Sum score across all shards for this group."
  },
  "Lucene.Net.Search.Grouping.TopGroups-1.html": {
    "href": "Lucene.Net.Search.Grouping.TopGroups-1.html",
    "title": "Class TopGroups<TGroupValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TopGroups<TGroupValue> Represents result returned by a grouping search. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TopGroups<TGroupValue> Implements ITopGroups <TGroupValue> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Search.Grouping Assembly : Lucene.Net.Grouping.dll Syntax public class TopGroups<TGroupValue> : ITopGroups<TGroupValue> Type Parameters Name Description TGroupValue Constructors | Improve this Doc View Source TopGroups(ITopGroups<TGroupValue>, Nullable<Int32>) Declaration public TopGroups(ITopGroups<TGroupValue> oldTopGroups, int? totalGroupCount) Parameters Type Name Description ITopGroups <TGroupValue> oldTopGroups System.Nullable < System.Int32 > totalGroupCount | Improve this Doc View Source TopGroups(SortField[], SortField[], Int32, Int32, IGroupDocs<TGroupValue>[], Single) Declaration public TopGroups(SortField[] groupSort, SortField[] withinGroupSort, int totalHitCount, int totalGroupedHitCount, IGroupDocs<TGroupValue>[] groups, float maxScore) Parameters Type Name Description SortField [] groupSort SortField [] withinGroupSort System.Int32 totalHitCount System.Int32 totalGroupedHitCount IGroupDocs <TGroupValue>[] groups System.Single maxScore Properties | Improve this Doc View Source Groups Group results in groupSort order Declaration public IGroupDocs<TGroupValue>[] Groups { get; } Property Value Type Description IGroupDocs <TGroupValue>[] | Improve this Doc View Source GroupSort How groups are sorted against each other Declaration public SortField[] GroupSort { get; } Property Value Type Description SortField [] | Improve this Doc View Source MaxScore Highest score across all hits, or System.Single.NaN if scores were not computed. Declaration public float MaxScore { get; } Property Value Type Description System.Single | Improve this Doc View Source TotalGroupCount The total number of unique groups. If null this value is not computed. Declaration public int? TotalGroupCount { get; } Property Value Type Description System.Nullable < System.Int32 > | Improve this Doc View Source TotalGroupedHitCount Number of documents grouped into the topN groups Declaration public int TotalGroupedHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source TotalHitCount Number of documents matching the search Declaration public int TotalHitCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source WithinGroupSort How docs are sorted within each group Declaration public SortField[] WithinGroupSort { get; } Property Value Type Description SortField [] Implements ITopGroups<TGroupValue>"
  },
  "package.html": {
    "href": "package.html",
    "title": "Lucene.Net.Grouping | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Lucene.Net.Grouping <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> This module enables search result grouping with Lucene, where hits with the same value in the specified single-valued group field are grouped together. For example, if you group by the author field, then all documents with the same value in the author field fall into a single group. Grouping requires a number of inputs: groupField : this is the field used for grouping. For example, if you use the author field then each group has all books by the same author. Documents that don't have this field are grouped under a single group with a null group value. groupSort : how the groups are sorted. For sorting purposes, each group is \"represented\" by the highest-sorted document according to the groupSort within it. For example, if you specify \"price\" (ascending) then the first group is the one with the lowest price book within it. Or if you specify relevance group sort, then the first group is the one containing the highest scoring book. topNGroups : how many top groups to keep. For example, 10 means the top 10 groups are computed. groupOffset : which \"slice\" of top groups you want to retrieve. For example, 3 means you'll get 7 groups back (assuming topNGroups is 10). This is useful for paging, where you might show 5 groups per page. withinGroupSort : how the documents within each group are sorted. This can be different from the group sort. maxDocsPerGroup : how many top documents within each group to keep. withinGroupOffset : which \"slice\" of top documents you want to retrieve from each group. The implementation is two-pass: the first pass (<xref:Lucene.Net.Grouping.Term.TermFirstPassGroupingCollector>) gathers the top groups, and the second pass (<xref:Lucene.Net.Grouping.Term.TermSecondPassGroupingCollector>) gathers documents within those groups. If the search is costly to run you may want to use the CachingCollector class, which caches hits and can (quickly) replay them for the second pass. This way you only run the query once, but you pay a RAM cost to (briefly) hold all hits. Results are returned as a <xref:Lucene.Net.Grouping.TopGroups> instance. This module abstracts away what defines group and how it is collected. All grouping collectors are abstract and have currently term based implementations. One can implement collectors that for example group on multiple fields. Known limitations: For the two-pass grouping search, the group field must be a single-valued indexed field (or indexed as a SortedDocValuesField ). FieldCache is used to load the SortedDocValues for this field. Although Solr support grouping by function and this module has abstraction of what a group is, there are currently only implementations for grouping based on terms. Sharding is not directly supported, though is not too difficult, if you can merge the top groups and top documents per group yourself. Typical usage for the generic two-pass grouping search looks like this using the grouping convenience utility (optionally using caching for the second pass search): GroupingSearch groupingSearch = new GroupingSearch(\"author\"); groupingSearch.setGroupSort(groupSort); groupingSearch.setFillSortFields(fillFields); if (useCache) { // Sets cache in MB groupingSearch.setCachingInMB(4.0, true); } if (requiredTotalGroupCount) { groupingSearch.setAllGroups(true); } TermQuery query = new TermQuery(new Term(\"content\", searchTerm)); TopGroups result = groupingSearch.search(indexSearcher, query, groupOffset, groupLimit); // Render groupsResult... if (requiredTotalGroupCount) { int totalGroupCount = result.totalGroupCount; } To use the single-pass BlockGroupingCollector , first, at indexing time, you must ensure all docs in each group are added as a block, and you have some way to find the last document of each group. One simple way to do this is to add a marker binary field: // Create Documents from your source: List<Document> oneGroup = ...; Field groupEndField = new Field(\"groupEnd\", \"x\", Field.Store.NO, Field.Index.NOT_ANALYZED); groupEndField.setIndexOptions(IndexOptions.DOCS_ONLY); groupEndField.setOmitNorms(true); oneGroup.get(oneGroup.size()-1).add(groupEndField); // You can also use writer.updateDocuments(); just be sure you // replace an entire previous doc block with this new one. For // example, each group could have a \"groupID\" field, with the same // value for all docs in this group: writer.addDocuments(oneGroup); Then, at search time, do this up front: // Set this once in your app & save away for reusing across all queries: Filter groupEndDocs = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term(\"groupEnd\", \"x\")))); Finally, do this per search: // Per search: BlockGroupingCollector c = new BlockGroupingCollector(groupSort, groupOffset+topNGroups, needsScores, groupEndDocs); s.search(new TermQuery(new Term(\"content\", searchTerm)), c); TopGroups groupsResult = c.getTopGroups(withinGroupSort, groupOffset, docOffset, docOffset+docsPerGroup, fillFields); // Render groupsResult... Or alternatively use the GroupingSearch convenience utility: // Per search: GroupingSearch groupingSearch = new GroupingSearch(groupEndDocs); groupingSearch.setGroupSort(groupSort); groupingSearch.setIncludeScores(needsScores); TermQuery query = new TermQuery(new Term(\"content\", searchTerm)); TopGroups groupsResult = groupingSearch.search(indexSearcher, query, groupOffset, groupLimit); // Render groupsResult... Note that the groupValue of each GroupDocs will be null , so if you need to present this value you'll have to separately retrieve it (for example using stored fields, FieldCache , etc.). Another collector is the TermAllGroupHeadsCollector that can be used to retrieve all most relevant documents per group. Also known as group heads. This can be useful in situations when one wants to compute group based facets / statistics on the complete query result. The collector can be executed during the first or second phase. This collector can also be used with the GroupingSearch convenience utility, but when if one only wants to compute the most relevant documents per group it is better to just use the collector as done here below. AbstractAllGroupHeadsCollector c = TermAllGroupHeadsCollector.create(groupField, sortWithinGroup); s.search(new TermQuery(new Term(\"content\", searchTerm)), c); // Return all group heads as int array int[] groupHeadsArray = c.retrieveGroupHeads() // Return all group heads as FixedBitSet. int maxDoc = s.maxDoc(); FixedBitSet groupHeadsBitSet = c.retrieveGroupHeads(maxDoc) For each of the above collector types there is also a variant that works with ValueSource instead of of fields. Concretely this means that these variants can work with functions. These variants are slower than there term based counter parts. These implementations are located in the org.apache.lucene.search.grouping.function package, but can also be used with the GroupingSearch convenience utility"
  }
}