{
  "Lucene.Net.Documents.DocumentExtensions.html": {
    "href": "Lucene.Net.Documents.DocumentExtensions.html",
    "title": "Class DocumentExtensions | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DocumentExtensions LUCENENET specific extensions to the Lucene.Net.Documents.Document class. Inheritance System.Object DocumentExtensions 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.Documents Assembly : Lucene.Net.Facet.dll Syntax public static class DocumentExtensions Methods | Improve this Doc View Source AddAssociationFacetField(Document, BytesRef, String, String[]) Adds a new AssociationFacetField using dim and path and an association. Declaration public static AssociationFacetField AddAssociationFacetField(this Document document, BytesRef assoc, string dim, params string[] path) Parameters Type Name Description Lucene.Net.Documents.Document document This Lucene.Net.Documents.Document . Lucene.Net.Util.BytesRef assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description AssociationFacetField The field that was added to this Lucene.Net.Documents.Document . | Improve this Doc View Source AddFacetField(Document, String, String[]) Adds a new FacetField with the specified dim and path . Declaration public static FacetField AddFacetField(this Document document, string dim, params string[] path) Parameters Type Name Description Lucene.Net.Documents.Document document This Lucene.Net.Documents.Document . System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description FacetField The field that was added to this Lucene.Net.Documents.Document . | Improve this Doc View Source AddInt32AssociationFacetField(Document, Int32, String, String[]) Adds a new Int32AssociationFacetField using dim and path and an System.Int32 association. Declaration public static Int32AssociationFacetField AddInt32AssociationFacetField(this Document document, int assoc, string dim, params string[] path) Parameters Type Name Description Lucene.Net.Documents.Document document This Lucene.Net.Documents.Document . System.Int32 assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description Int32AssociationFacetField The field that was added to this Lucene.Net.Documents.Document . | Improve this Doc View Source AddSingleAssociationFacetField(Document, Single, String, String[]) Adds a new SingleAssociationFacetField using dim and path and a System.Single association. Declaration public static SingleAssociationFacetField AddSingleAssociationFacetField(this Document document, float assoc, string dim, params string[] path) Parameters Type Name Description Lucene.Net.Documents.Document document This Lucene.Net.Documents.Document . System.Single assoc Associated value. System.String dim Dimension for this field. System.String [] path Facet path for this field. Returns Type Description SingleAssociationFacetField The field that was added to this Lucene.Net.Documents.Document . | Improve this Doc View Source AddSortedSetDocValuesFacetField(Document, String, String) Adds a new SortedSetDocValuesFacetField . Declaration public static SortedSetDocValuesFacetField AddSortedSetDocValuesFacetField(this Document document, string dim, string label) Parameters Type Name Description Lucene.Net.Documents.Document document This Lucene.Net.Documents.Document . System.String dim Dimension for this field. System.String label Label for this field. Returns Type Description SortedSetDocValuesFacetField The field that was added to this Lucene.Net.Documents.Document . Remarks Add a SortedSetDocValuesFacetField to your Lucene.Net.Documents.Document for every facet label to be indexed via Lucene.Net.Index.SortedSetDocValues ."
  },
  "Lucene.Net.Documents.html": {
    "href": "Lucene.Net.Documents.html",
    "title": "Namespace Lucene.Net.Documents | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Documents Classes DocumentExtensions LUCENENET specific extensions to the Lucene.Net.Documents.Document class."
  },
  "Lucene.Net.Facet.DrillDownQuery.html": {
    "href": "Lucene.Net.Facet.DrillDownQuery.html",
    "title": "Class DrillDownQuery | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DrillDownQuery A Lucene.Net.Search.Query for drill-down over facet categories. You should call Add(String, String[]) for every group of categories you want to drill-down over. NOTE: if you choose to create your own Lucene.Net.Search.Query by calling Term(String, String, String[]) , it is recommended to wrap it with ConstantScoreQuery and set the Lucene.Net.Search.Query.Boost to 0.0f , so that it does not affect the scores of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Search.Query DrillDownQuery Inherited Members Lucene.Net.Search.Query.Boost Lucene.Net.Search.Query.ToString() Lucene.Net.Search.Query.CreateWeight(Lucene.Net.Search.IndexSearcher) Query.ExtractTerms(ISet<Term>) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class DrillDownQuery : Query Constructors | Improve this Doc View Source DrillDownQuery(FacetsConfig) Creates a new DrillDownQuery without a base query, to perform a pure browsing query (equivalent to using MatchAllDocsQuery as base). Declaration public DrillDownQuery(FacetsConfig config) Parameters Type Name Description FacetsConfig config | Improve this Doc View Source DrillDownQuery(FacetsConfig, Query) Creates a new DrillDownQuery over the given base query. Can be null , in which case the result Lucene.Net.Search.Query from Rewrite(IndexReader) will be a pure browsing query, filtering on the added categories only. Declaration public DrillDownQuery(FacetsConfig config, Query baseQuery) Parameters Type Name Description FacetsConfig config Lucene.Net.Search.Query baseQuery Methods | Improve this Doc View Source Add(String, Filter) Expert: add a custom drill-down Filter, e.g. when drilling down after range faceting. Declaration public void Add(string dim, Filter subFilter) Parameters Type Name Description System.String dim Lucene.Net.Search.Filter subFilter | Improve this Doc View Source Add(String, Query) Expert: add a custom drill-down subQuery. Use this when you have a separate way to drill-down on the dimension than the indexed facet ordinals. Declaration public void Add(string dim, Query subQuery) Parameters Type Name Description System.String dim Lucene.Net.Search.Query subQuery | Improve this Doc View Source Add(String, String[]) Adds one dimension of drill downs; if you pass the same dimension more than once it is OR'd with the previous cofnstraints on that dimension, and all dimensions are AND'd against each other and the base query. Declaration public void Add(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path | Improve this Doc View Source Clone() Declaration public override object Clone() Returns Type Description System.Object Overrides Lucene.Net.Search.Query.Clone() | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj Returns Type Description System.Boolean Overrides Query.Equals(Object) | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Lucene.Net.Search.Query.GetHashCode() | Improve this Doc View Source Rewrite(IndexReader) Declaration public override Query Rewrite(IndexReader r) Parameters Type Name Description Lucene.Net.Index.IndexReader r Returns Type Description Lucene.Net.Search.Query Overrides Lucene.Net.Search.Query.Rewrite(Lucene.Net.Index.IndexReader) | Improve this Doc View Source Term(String, String, String[]) Creates a drill-down term. Declaration public static Term Term(string field, string dim, params string[] path) Parameters Type Name Description System.String field System.String dim System.String [] path Returns Type Description Lucene.Net.Index.Term | Improve this Doc View Source ToString(String) Declaration public override string ToString(string field) Parameters Type Name Description System.String field Returns Type Description System.String Overrides Query.ToString(String)"
  },
  "Lucene.Net.Facet.DrillSideways.html": {
    "href": "Lucene.Net.Facet.DrillSideways.html",
    "title": "Class DrillSideways | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DrillSideways Computes drill down and sideways counts for the provided DrillDownQuery . Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it. Use one of the static search methods to do the search, and then get the hits and facet results from the returned DrillSidewaysResult . NOTE : this allocates one FacetsCollector for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage. @lucene.experimental Inheritance System.Object DrillSideways 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class DrillSideways Constructors | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, SortedSetDocValuesReaderState) Create a new DrillSideways instance, assuming the categories were indexed with SortedSetDocValuesFacetField . Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, SortedSetDocValuesReaderState state) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher FacetsConfig config SortedSetDocValuesReaderState state | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, TaxonomyReader) Create a new DrillSideways instance. Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher FacetsConfig config TaxonomyReader taxoReader | Improve this Doc View Source DrillSideways(IndexSearcher, FacetsConfig, TaxonomyReader, SortedSetDocValuesReaderState) Create a new DrillSideways instance, where some dimensions were indexed with SortedSetDocValuesFacetField and others were indexed with FacetField . Declaration public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher FacetsConfig config TaxonomyReader taxoReader SortedSetDocValuesReaderState state Fields | Improve this Doc View Source m_config FacetsConfig passed to constructor. Declaration protected readonly FacetsConfig m_config Field Value Type Description FacetsConfig | Improve this Doc View Source m_searcher Lucene.Net.Search.IndexSearcher passed to constructor. Declaration protected readonly IndexSearcher m_searcher Field Value Type Description Lucene.Net.Search.IndexSearcher | Improve this Doc View Source m_state SortedSetDocValuesReaderState passed to constructor; can be null . Declaration protected readonly SortedSetDocValuesReaderState m_state Field Value Type Description SortedSetDocValuesReaderState | Improve this Doc View Source m_taxoReader TaxonomyReader passed to constructor. Declaration protected readonly TaxonomyReader m_taxoReader Field Value Type Description TaxonomyReader Properties | Improve this Doc View Source ScoreSubDocsAtOnce Override this and return true if your collector (e.g., Lucene.Net.Join.ToParentBlockJoinCollector ) expects all sub-scorers to be positioned on the document being collected. This will cause some performance loss; default is false . Note that if you return true from this method (in a subclass) be sure your collector also returns false from Lucene.Net.Search.ICollector.AcceptsDocsOutOfOrder : this will trick BooleanQuery into also scoring all subDocs at once. Declaration protected virtual bool ScoreSubDocsAtOnce { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source BuildFacetsResult(FacetsCollector, FacetsCollector[], String[]) Subclass can override to customize per-dim Facets impl. Declaration protected virtual Facets BuildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, string[] drillSidewaysDims) Parameters Type Name Description FacetsCollector drillDowns FacetsCollector [] drillSideways System.String [] drillSidewaysDims Returns Type Description Facets | Improve this Doc View Source Search(DrillDownQuery, Filter, FieldDoc, Int32, Sort, Boolean, Boolean) Search, sorting by Lucene.Net.Search.Sort , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, Filter filter, FieldDoc after, int topN, Sort sort, bool doDocScores, bool doMaxScore) Parameters Type Name Description DrillDownQuery query Lucene.Net.Search.Filter filter Lucene.Net.Search.FieldDoc after System.Int32 topN Lucene.Net.Search.Sort sort System.Boolean doDocScores System.Boolean doMaxScore Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(DrillDownQuery, ICollector) Search, collecting hits with a Lucene.Net.Search.ICollector , and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, ICollector hitCollector) Parameters Type Name Description DrillDownQuery query Lucene.Net.Search.ICollector hitCollector Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(DrillDownQuery, Int32) Search, sorting by score, and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(DrillDownQuery query, int topN) Parameters Type Name Description DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult | Improve this Doc View Source Search(ScoreDoc, DrillDownQuery, Int32) Search, sorting by score, and computing drill down and sideways counts. Declaration public virtual DrillSidewaysResult Search(ScoreDoc after, DrillDownQuery query, int topN) Parameters Type Name Description Lucene.Net.Search.ScoreDoc after DrillDownQuery query System.Int32 topN Returns Type Description DrillSidewaysResult"
  },
  "Lucene.Net.Facet.DrillSidewaysResult.html": {
    "href": "Lucene.Net.Facet.DrillSidewaysResult.html",
    "title": "Class DrillSidewaysResult | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DrillSidewaysResult Result of a drill sideways search, including the Facets and Lucene.Net.Search.TopDocs . Inheritance System.Object DrillSidewaysResult 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class DrillSidewaysResult Constructors | Improve this Doc View Source DrillSidewaysResult(Facets, TopDocs) Sole constructor. Declaration public DrillSidewaysResult(Facets facets, TopDocs hits) Parameters Type Name Description Facets facets Lucene.Net.Search.TopDocs hits Properties | Improve this Doc View Source Facets Combined drill down & sideways results. Declaration public Facets Facets { get; } Property Value Type Description Facets | Improve this Doc View Source Hits Hits. Declaration public TopDocs Hits { get; } Property Value Type Description Lucene.Net.Search.TopDocs"
  },
  "Lucene.Net.Facet.FacetField.html": {
    "href": "Lucene.Net.Facet.FacetField.html",
    "title": "Class FacetField | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetField Add an instance of this to your Lucene.Net.Documents.Document for every facet label. NOTE: you must call Build(Document) before you add the document to Lucene.Net.Index.IndexWriter . Inheritance System.Object Lucene.Net.Documents.Field FacetField Implements Lucene.Net.Index.IIndexableField Inherited Members Lucene.Net.Documents.Field.m_type Lucene.Net.Documents.Field.m_name Lucene.Net.Documents.Field.FieldsData Lucene.Net.Documents.Field.m_tokenStream Lucene.Net.Documents.Field.m_boost Lucene.Net.Documents.Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Lucene.Net.Documents.Field.GetReaderValue() Lucene.Net.Documents.Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Lucene.Net.Documents.Field.SetBytesValue(Lucene.Net.Util.BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Lucene.Net.Documents.Field.SetTokenStream(Lucene.Net.Analysis.TokenStream) Lucene.Net.Documents.Field.Name Lucene.Net.Documents.Field.Boost Lucene.Net.Documents.Field.GetNumericValue() Lucene.Net.Documents.Field.NumericType Lucene.Net.Documents.Field.GetByteValue() Lucene.Net.Documents.Field.GetInt16Value() Lucene.Net.Documents.Field.GetInt32Value() Lucene.Net.Documents.Field.GetInt64Value() Lucene.Net.Documents.Field.GetSingleValue() Lucene.Net.Documents.Field.GetDoubleValue() Lucene.Net.Documents.Field.GetBinaryValue() Lucene.Net.Documents.Field.FieldType Lucene.Net.Documents.Field.IndexableFieldType Lucene.Net.Documents.Field.GetTokenStream(Lucene.Net.Analysis.Analyzer) Lucene.Net.Documents.Field.TranslateFieldType(Lucene.Net.Documents.Field.Store, Lucene.Net.Documents.Field.Index, Lucene.Net.Documents.Field.TermVector) 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) Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetField : Field, IIndexableField Constructors | Improve this Doc View Source FacetField(String, String[]) Creates the this from dim and path . Declaration public FacetField(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Properties | Improve this Doc View Source Dim Dimension for this field. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Path Path for this field. Declaration public string[] Path { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Documents.Field.ToString() | Improve this Doc View Source VerifyLabel(String) Verifies the label is not null or empty string. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public static void VerifyLabel(string label) Parameters Type Name Description System.String label Implements Lucene.Net.Index.IIndexableField"
  },
  "Lucene.Net.Facet.FacetResult.html": {
    "href": "Lucene.Net.Facet.FacetResult.html",
    "title": "Class FacetResult | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetResult Counts or aggregates for a single dimension. Inheritance System.Object FacetResult 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class FacetResult Constructors | Improve this Doc View Source FacetResult(String, String[], Int32, LabelAndValue[], Int32) Constructor for System.Int32 value . Makes the ToString() method print the value as an System.Int32 with no decimal. Declaration public FacetResult(string dim, string[] path, int value, LabelAndValue[] labelValues, int childCount) Parameters Type Name Description System.String dim System.String [] path System.Int32 value LabelAndValue [] labelValues System.Int32 childCount | Improve this Doc View Source FacetResult(String, String[], Single, LabelAndValue[], Int32) Constructor for System.Single value . Makes the ToString() method print the value as a System.Single with at least 1 number after the decimal. Declaration public FacetResult(string dim, string[] path, float value, LabelAndValue[] labelValues, int childCount) Parameters Type Name Description System.String dim System.String [] path System.Single value LabelAndValue [] labelValues System.Int32 childCount Properties | Improve this Doc View Source ChildCount How many child labels were encountered. Declaration public int ChildCount { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Dim Dimension that was requested. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source LabelValues Child counts. Declaration public LabelAndValue[] LabelValues { get; } Property Value Type Description LabelAndValue [] | Improve this Doc View Source Path Path whose children were requested. Declaration public string[] Path { get; } Property Value Type Description System.String [] | Improve this Doc View Source TypeOfValue The original data type of Value that was passed through the constructor. Declaration public Type TypeOfValue { get; } Property Value Type Description System.Type | Improve this Doc View Source Value Total value for this path (sum of all child counts, or sum of all child values), even those not included in the topN. Declaration public float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other 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.Facet.Facets.html": {
    "href": "Lucene.Net.Facet.Facets.html",
    "title": "Class Facets | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Facets Common base class for all facets implementations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets MultiFacets RangeFacetCounts SortedSetDocValuesFacetCounts TaxonomyFacets 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public abstract class Facets Constructors | Improve this Doc View Source Facets() Default constructor. Declaration protected Facets() Methods | Improve this Doc View Source GetAllDims(Int32) Returns topN labels for any dimension that had hits, sorted by the number of hits that dimension matched; this is used for \"sparse\" faceting, where many different dimensions were indexed, for example depending on the type of document. Declaration public abstract IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > | Improve this Doc View Source GetSpecificValue(String, String[]) Return the count or value for a specific path. Returns -1 if this path doesn't exist, else the count. Declaration public abstract float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Returns the topN child labels under the specified path. Returns null if the specified path doesn't exist or if this dimension was never seen. Declaration public abstract FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult"
  },
  "Lucene.Net.Facet.FacetsCollector.Docs.html": {
    "href": "Lucene.Net.Facet.FacetsCollector.Docs.html",
    "title": "Class FacetsCollector.Docs | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetsCollector.Docs Used during collection to record matching docs and then return a DocIdSet that contains them. Inheritance System.Object FacetsCollector.Docs 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.Facet Assembly : Lucene.Net.Facet.dll Syntax protected abstract class Docs Constructors | Improve this Doc View Source Docs() Sole constructor. Declaration protected Docs() Properties | Improve this Doc View Source DocIdSet Return the DocIdSet which contains all the recorded docs. Declaration public abstract DocIdSet DocIdSet { get; } Property Value Type Description Lucene.Net.Search.DocIdSet Methods | Improve this Doc View Source AddDoc(Int32) Record the given document. Declaration public abstract void AddDoc(int docId) Parameters Type Name Description System.Int32 docId"
  },
  "Lucene.Net.Facet.FacetsCollector.html": {
    "href": "Lucene.Net.Facet.FacetsCollector.html",
    "title": "Class FacetsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the Lucene.Net.Search.ICollector subclasses to do the facet counting. Use the Search utility methods (such as Search(IndexSearcher, Query, Int32, ICollector) ) to perform an \"ordinary\" search but also collect into a Facets . Inheritance System.Object FacetsCollector RandomSamplingFacetsCollector 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetsCollector : ICollector Constructors | Improve this Doc View Source FacetsCollector() Default constructor Declaration public FacetsCollector() | Improve this Doc View Source FacetsCollector(Boolean) Create this; if keepScores is true then a float[] is allocated to hold score of all hits. Declaration public FacetsCollector(bool keepScores) Parameters Type Name Description System.Boolean keepScores Properties | Improve this Doc View Source AcceptsDocsOutOfOrder Declaration public bool AcceptsDocsOutOfOrder { get; } Property Value Type Description System.Boolean | Improve this Doc View Source KeepScores True if scores were saved. Declaration public bool KeepScores { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Collect(Int32) Declaration public void Collect(int doc) Parameters Type Name Description System.Int32 doc | Improve this Doc View Source CreateDocs(Int32) Creates a FacetsCollector.Docs to record hits. The default uses FixedBitSet to record hits and you can override to e.g. record the docs in your own Lucene.Net.Search.DocIdSet . Declaration protected virtual FacetsCollector.Docs CreateDocs(int maxDoc) Parameters Type Name Description System.Int32 maxDoc Returns Type Description FacetsCollector.Docs | Improve this Doc View Source GetMatchingDocs() Returns the documents matched by the query, one FacetsCollector.MatchingDocs per visited segment. Declaration public virtual IList<FacetsCollector.MatchingDocs> GetMatchingDocs() Returns Type Description System.Collections.Generic.IList < FacetsCollector.MatchingDocs > | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.Query q Lucene.Net.Search.Filter filter System.Int32 n Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopDocs | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, Sort, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.Query q Lucene.Net.Search.Filter filter System.Int32 n Lucene.Net.Search.Sort sort Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopFieldDocs Search(IndexSearcher searcher, Query q, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.Query q Lucene.Net.Search.Filter filter System.Int32 n Lucene.Net.Search.Sort sort System.Boolean doDocScores System.Boolean doMaxScore Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopFieldDocs | Improve this Doc View Source Search(IndexSearcher, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopDocs Search(IndexSearcher searcher, Query q, int n, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.Query q System.Int32 n Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.ScoreDoc after Lucene.Net.Search.Query q Lucene.Net.Search.Filter filter System.Int32 n Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.ScoreDoc after Lucene.Net.Search.Query q Lucene.Net.Search.Filter filter System.Int32 n Lucene.Net.Search.Sort sort Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public static TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, Filter filter, int n, Sort sort, bool doDocScores, bool doMaxScore, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.ScoreDoc after Lucene.Net.Search.Query q Lucene.Net.Search.Filter filter System.Int32 n Lucene.Net.Search.Sort sort System.Boolean doDocScores System.Boolean doMaxScore Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopDocs | Improve this Doc View Source SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) Utility method, to search and also collect all hits into the provided Lucene.Net.Search.ICollector . Declaration public virtual TopDocs SearchAfter(IndexSearcher searcher, ScoreDoc after, Query q, int n, ICollector fc) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher Lucene.Net.Search.ScoreDoc after Lucene.Net.Search.Query q System.Int32 n Lucene.Net.Search.ICollector fc Returns Type Description Lucene.Net.Search.TopDocs | Improve this Doc View Source SetNextReader(AtomicReaderContext) Declaration public void SetNextReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context | Improve this Doc View Source SetScorer(Scorer) Declaration public void SetScorer(Scorer scorer) Parameters Type Name Description Lucene.Net.Search.Scorer scorer Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Facet.FacetsCollector.MatchingDocs.html": {
    "href": "Lucene.Net.Facet.FacetsCollector.MatchingDocs.html",
    "title": "Class FacetsCollector.MatchingDocs | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetsCollector.MatchingDocs Holds the documents that were matched in the Lucene.Net.Index.AtomicReaderContext . If scores were required, then Scores is not null . Inheritance System.Object FacetsCollector.MatchingDocs 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class MatchingDocs Constructors | Improve this Doc View Source MatchingDocs(AtomicReaderContext, DocIdSet, Int32, Single[]) Sole constructor. Declaration public MatchingDocs(AtomicReaderContext context, DocIdSet bits, int totalHits, float[] scores) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Lucene.Net.Search.DocIdSet bits System.Int32 totalHits System.Single [] scores Properties | Improve this Doc View Source Bits Which documents were seen. Declaration public DocIdSet Bits { get; } Property Value Type Description Lucene.Net.Search.DocIdSet | Improve this Doc View Source Context Context for this segment. Declaration public AtomicReaderContext Context { get; } Property Value Type Description Lucene.Net.Index.AtomicReaderContext | Improve this Doc View Source Scores Non-sparse scores array. Declaration public float[] Scores { get; } Property Value Type Description System.Single [] | Improve this Doc View Source TotalHits Total number of hits Declaration public int TotalHits { get; } Property Value Type Description System.Int32"
  },
  "Lucene.Net.Facet.FacetsConfig.DimConfig.html": {
    "href": "Lucene.Net.Facet.FacetsConfig.DimConfig.html",
    "title": "Class FacetsConfig.DimConfig | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetsConfig.DimConfig Holds the configuration for one dimension This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object FacetsConfig.DimConfig 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class DimConfig Constructors | Improve this Doc View Source DimConfig() Default constructor. Declaration public DimConfig() Properties | Improve this Doc View Source IndexFieldName Actual field where this dimension's facet labels should be indexed Declaration public string IndexFieldName { get; set; } Property Value Type Description System.String | Improve this Doc View Source IsHierarchical True if this dimension is hierarchical. Declaration public bool IsHierarchical { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source IsMultiValued True if this dimension is multi-valued. Declaration public bool IsMultiValued { get; set; } Property Value Type Description System.Boolean | Improve this Doc View Source RequireDimCount True if the count/aggregate for the entire dimension is required, which is unusual (default is false). Declaration public bool RequireDimCount { get; set; } Property Value Type Description System.Boolean"
  },
  "Lucene.Net.Facet.FacetsConfig.html": {
    "href": "Lucene.Net.Facet.FacetsConfig.html",
    "title": "Class FacetsConfig | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetsConfig Records per-dimension configuration. By default a dimension is flat, single valued and does not require count for the dimension; use the setters in this class to change these settings for each dim. NOTE : this configuration is not saved into the index, but it's vital, and up to the application to ensure, that at search time the provided FacetsConfig matches what was used during indexing. @lucene.experimental Inheritance System.Object FacetsConfig 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class FacetsConfig Constructors | Improve this Doc View Source FacetsConfig() Default constructor. Declaration public FacetsConfig() Fields | Improve this Doc View Source DEFAULT_DIM_CONFIG Default per-dimension configuration. Declaration public static readonly FacetsConfig.DimConfig DEFAULT_DIM_CONFIG Field Value Type Description FacetsConfig.DimConfig | Improve this Doc View Source DEFAULT_INDEX_FIELD_NAME Which Lucene field holds the drill-downs and ords (as doc values). Declaration public const string DEFAULT_INDEX_FIELD_NAME = \"$facets\" Field Value Type Description System.String Properties | Improve this Doc View Source DefaultDimConfig Get the default configuration for new dimensions. Useful when the dimension is not known beforehand and may need different global default settings, like multivalue = true . Declaration protected virtual FacetsConfig.DimConfig DefaultDimConfig { get; } Property Value Type Description FacetsConfig.DimConfig The default configuration to be used for dimensions that are not yet set in the FacetsConfig | Improve this Doc View Source DimConfigs Returns map of field name to FacetsConfig.DimConfig . Declaration public virtual IDictionary<string, FacetsConfig.DimConfig> DimConfigs { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , FacetsConfig.DimConfig > Methods | Improve this Doc View Source Build(Document) Translates any added FacetField s into normal fields for indexing; only use this version if you did not add any taxonomy-based fields ( FacetField or AssociationFacetField ). NOTE: you should add the returned document to Lucene.Net.Index.IndexWriter , not the input one! Declaration public virtual Document Build(Document doc) Parameters Type Name Description Lucene.Net.Documents.Document doc Returns Type Description Lucene.Net.Documents.Document | Improve this Doc View Source Build(ITaxonomyWriter, Document) Translates any added FacetField s into normal fields for indexing. NOTE: you should add the returned document to Lucene.Net.Index.IndexWriter , not the input one! Declaration public virtual Document Build(ITaxonomyWriter taxoWriter, Document doc) Parameters Type Name Description ITaxonomyWriter taxoWriter Lucene.Net.Documents.Document doc Returns Type Description Lucene.Net.Documents.Document | Improve this Doc View Source DedupAndEncode(Int32sRef) Encodes ordinals into a Lucene.Net.Util.BytesRef ; expert: subclass can override this to change encoding. Declaration protected virtual BytesRef DedupAndEncode(Int32sRef ordinals) Parameters Type Name Description Lucene.Net.Util.Int32sRef ordinals Returns Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source GetDimConfig(String) Get the current configuration for a dimension. Declaration public virtual FacetsConfig.DimConfig GetDimConfig(string dimName) Parameters Type Name Description System.String dimName Returns Type Description FacetsConfig.DimConfig | Improve this Doc View Source PathToString(String, String[]) Turns a dim + path into an encoded string. Declaration public static string PathToString(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.String | Improve this Doc View Source PathToString(String[]) Turns a dim + path into an encoded string. Declaration public static string PathToString(string[] path) Parameters Type Name Description System.String [] path Returns Type Description System.String | Improve this Doc View Source PathToString(String[], Int32) Turns the first length elements of path into an encoded string. Declaration public static string PathToString(string[] path, int length) Parameters Type Name Description System.String [] path System.Int32 length Returns Type Description System.String | Improve this Doc View Source SetHierarchical(String, Boolean) Pass true if this dimension is hierarchical (has depth > 1 paths). Declaration public virtual void SetHierarchical(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source SetIndexFieldName(String, String) Specify which index field name should hold the ordinals for this dimension; this is only used by the taxonomy based facet methods. Declaration public virtual void SetIndexFieldName(string dimName, string indexFieldName) Parameters Type Name Description System.String dimName System.String indexFieldName | Improve this Doc View Source SetMultiValued(String, Boolean) Pass true if this dimension may have more than one value per document. Declaration public virtual void SetMultiValued(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source SetRequireDimCount(String, Boolean) Pass true if at search time you require accurate counts of the dimension, i.e. how many hits have this dimension. Declaration public virtual void SetRequireDimCount(string dimName, bool v) Parameters Type Name Description System.String dimName System.Boolean v | Improve this Doc View Source StringToPath(String) Turns an encoded string (from a previous call to PathToString(String[]) ) back into the original string[] . Declaration public static string[] StringToPath(string s) Parameters Type Name Description System.String s Returns Type Description System.String []"
  },
  "Lucene.Net.Facet.html": {
    "href": "Lucene.Net.Facet.html",
    "title": "Namespace Lucene.Net.Facet | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Facet <!-- 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. --> Provides faceted indexing and search capabilities. Checkout this and this blog posts for some overview on the facets module as well as source code examples here . Classes DrillDownQuery A Lucene.Net.Search.Query for drill-down over facet categories. You should call Add(String, String[]) for every group of categories you want to drill-down over. NOTE: if you choose to create your own Lucene.Net.Search.Query by calling Term(String, String, String[]) , it is recommended to wrap it with ConstantScoreQuery and set the Lucene.Net.Search.Query.Boost to 0.0f , so that it does not affect the scores of the documents. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DrillSideways Computes drill down and sideways counts for the provided DrillDownQuery . Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it. Use one of the static search methods to do the search, and then get the hits and facet results from the returned DrillSidewaysResult . NOTE : this allocates one FacetsCollector for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage. @lucene.experimental DrillSidewaysResult Result of a drill sideways search, including the Facets and Lucene.Net.Search.TopDocs . FacetField Add an instance of this to your Lucene.Net.Documents.Document for every facet label. NOTE: you must call Build(Document) before you add the document to Lucene.Net.Index.IndexWriter . FacetResult Counts or aggregates for a single dimension. Facets Common base class for all facets implementations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk FacetsCollector Collects hits for subsequent faceting. Once you've run a search and collect hits into this, instantiate one of the Lucene.Net.Search.ICollector subclasses to do the facet counting. Use the Search utility methods (such as Search(IndexSearcher, Query, Int32, ICollector) ) to perform an \"ordinary\" search but also collect into a Facets . FacetsCollector.Docs Used during collection to record matching docs and then return a DocIdSet that contains them. FacetsCollector.MatchingDocs Holds the documents that were matched in the Lucene.Net.Index.AtomicReaderContext . If scores were required, then Scores is not null . FacetsConfig Records per-dimension configuration. By default a dimension is flat, single valued and does not require count for the dimension; use the setters in this class to change these settings for each dim. NOTE : this configuration is not saved into the index, but it's vital, and up to the application to ensure, that at search time the provided FacetsConfig matches what was used during indexing. @lucene.experimental FacetsConfig.DimConfig Holds the configuration for one dimension This is a Lucene.NET EXPERIMENTAL API, use at your own risk LabelAndValue Single label and its value, usually contained in a FacetResult . MultiFacets Maps specified dims to provided Facets impls; else, uses the default Facets impl. OrdAndValue<T> Holds a single entry. RandomSamplingFacetsCollector Collects hits for subsequent faceting, using sampling if needed. Once you've run a search and collect hits into this, instantiate one of the Facets subclasses to do the facet counting. Note that this collector does not collect the scores of matching docs (i.e. Scores ) is null . If you require the original set of hits, you can call GetOriginalMatchingDocs() . Also, since the counts of the top-facets is based on the sampled set, you can amortize the counts by calling AmortizeFacetCounts(FacetResult, FacetsConfig, IndexSearcher) . TopOrdAndInt32Queue Keeps highest results, first by largest System.Int32 value, then tie break by smallest ord. NOTE: This was TopOrdAndIntQueue in Lucene TopOrdAndSingleQueue Keeps highest results, first by largest System.Single value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene"
  },
  "Lucene.Net.Facet.LabelAndValue.html": {
    "href": "Lucene.Net.Facet.LabelAndValue.html",
    "title": "Class LabelAndValue | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class LabelAndValue Single label and its value, usually contained in a FacetResult . Inheritance System.Object LabelAndValue 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class LabelAndValue Constructors | Improve this Doc View Source LabelAndValue(String, Int32) Constructor for System.Int32 value . Makes the ToString() method print the value as an System.Int32 with no decimal. Declaration public LabelAndValue(string label, int value) Parameters Type Name Description System.String label System.Int32 value | Improve this Doc View Source LabelAndValue(String, Single) Constructor for System.Single value . Makes the ToString() method print the value as a System.Single with at least 1 number after the decimal. Declaration public LabelAndValue(string label, float value) Parameters Type Name Description System.String label System.Single value Properties | Improve this Doc View Source Label Facet's label. Declaration public string Label { get; } Property Value Type Description System.String | Improve this Doc View Source TypeOfValue The original data type of Value that was passed through the constructor. Declaration public Type TypeOfValue { get; } Property Value Type Description System.Type | Improve this Doc View Source Value Value associated with this label. Declaration public float Value { get; } Property Value Type Description System.Single Methods | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object other) Parameters Type Name Description System.Object other 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.Facet.MultiFacets.html": {
    "href": "Lucene.Net.Facet.MultiFacets.html",
    "title": "Class MultiFacets | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class MultiFacets Maps specified dims to provided Facets impls; else, uses the default Facets impl. Inheritance System.Object Facets MultiFacets 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class MultiFacets : Facets Constructors | Improve this Doc View Source MultiFacets(IDictionary<String, Facets>, Facets) Create this, with the specified default Facets for fields not included in dimToFacets . Declaration public MultiFacets(IDictionary<string, Facets> dimToFacets, Facets defaultFacets = null) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , Facets > dimToFacets Facets defaultFacets Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "Lucene.Net.Facet.OrdAndValue-1.html": {
    "href": "Lucene.Net.Facet.OrdAndValue-1.html",
    "title": "Class OrdAndValue<T> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class OrdAndValue<T> Holds a single entry. Inheritance System.Object OrdAndValue<T> Implements System.IEquatable < OrdAndValue <T>> Inherited Members System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Facet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdAndValue<T> : IEquatable<OrdAndValue<T>> Type Parameters Name Description T Constructors | Improve this Doc View Source OrdAndValue(Int32, T) Default constructor. Declaration public OrdAndValue(int ord, T value) Parameters Type Name Description System.Int32 ord T value Fields | Improve this Doc View Source Ord Ordinal of the entry. Declaration public int Ord Field Value Type Description System.Int32 | Improve this Doc View Source Value Value associated with the ordinal. Declaration public T Value Field Value Type Description T Methods | Improve this Doc View Source Equals(OrdAndValue<T>) Declaration public bool Equals(OrdAndValue<T> other) Parameters Type Name Description OrdAndValue <T> other Returns Type Description System.Boolean | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj 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() Operators | Improve this Doc View Source Equality(OrdAndValue<T>, OrdAndValue<T>) Declaration public static bool operator ==(OrdAndValue<T> left, OrdAndValue<T> right) Parameters Type Name Description OrdAndValue <T> left OrdAndValue <T> right Returns Type Description System.Boolean | Improve this Doc View Source Inequality(OrdAndValue<T>, OrdAndValue<T>) Declaration public static bool operator !=(OrdAndValue<T> left, OrdAndValue<T> right) Parameters Type Name Description OrdAndValue <T> left OrdAndValue <T> right Returns Type Description System.Boolean Implements System.IEquatable<T>"
  },
  "Lucene.Net.Facet.RandomSamplingFacetsCollector.html": {
    "href": "Lucene.Net.Facet.RandomSamplingFacetsCollector.html",
    "title": "Class RandomSamplingFacetsCollector | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class RandomSamplingFacetsCollector Collects hits for subsequent faceting, using sampling if needed. Once you've run a search and collect hits into this, instantiate one of the Facets subclasses to do the facet counting. Note that this collector does not collect the scores of matching docs (i.e. Scores ) is null . If you require the original set of hits, you can call GetOriginalMatchingDocs() . Also, since the counts of the top-facets is based on the sampled set, you can amortize the counts by calling AmortizeFacetCounts(FacetResult, FacetsConfig, IndexSearcher) . Inheritance System.Object FacetsCollector RandomSamplingFacetsCollector Implements Lucene.Net.Search.ICollector Inherited Members FacetsCollector.CreateDocs(Int32) FacetsCollector.KeepScores FacetsCollector.AcceptsDocsOutOfOrder FacetsCollector.Collect(Int32) FacetsCollector.SetScorer(Scorer) FacetsCollector.SetNextReader(AtomicReaderContext) FacetsCollector.Search(IndexSearcher, Query, Int32, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, Sort, ICollector) FacetsCollector.Search(IndexSearcher, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Int32, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, ICollector) FacetsCollector.SearchAfter(IndexSearcher, ScoreDoc, Query, Filter, Int32, Sort, Boolean, Boolean, ICollector) 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class RandomSamplingFacetsCollector : FacetsCollector, ICollector Constructors | Improve this Doc View Source RandomSamplingFacetsCollector(Int32) Constructor with the given sample size and default seed. Declaration public RandomSamplingFacetsCollector(int sampleSize) Parameters Type Name Description System.Int32 sampleSize See Also RandomSamplingFacetsCollector(Int32, Int64) | Improve this Doc View Source RandomSamplingFacetsCollector(Int32, Int64) Constructor with the given sample size and seed. Declaration public RandomSamplingFacetsCollector(int sampleSize, long seed) Parameters Type Name Description System.Int32 sampleSize The preferred sample size. If the number of hits is greater than the size, sampling will be done using a sample ratio of sampling size / totalN. For example: 1000 hits, sample size = 10 results in samplingRatio of 0.01. If the number of hits is lower, no sampling is done at all System.Int64 seed The random seed. If 0 then a seed will be chosen for you. Properties | Improve this Doc View Source SamplingRate Returns the sampling rate that was used. Declaration public virtual double SamplingRate { get; } Property Value Type Description System.Double Methods | Improve this Doc View Source AmortizeFacetCounts(FacetResult, FacetsConfig, IndexSearcher) Note: if you use a counting Facets implementation, you can amortize the sampled counts by calling this method. Uses the FacetsConfig and the Lucene.Net.Search.IndexSearcher to determine the upper bound for each facet value. Declaration public virtual FacetResult AmortizeFacetCounts(FacetResult res, FacetsConfig config, IndexSearcher searcher) Parameters Type Name Description FacetResult res FacetsConfig config Lucene.Net.Search.IndexSearcher searcher Returns Type Description FacetResult | Improve this Doc View Source GetMatchingDocs() Returns the sampled list of the matching documents. Note that a FacetsCollector.MatchingDocs instance is returned per segment, even if no hits from that segment are included in the sampled set. Note: One or more of the FacetsCollector.MatchingDocs might be empty (not containing any hits) as result of sampling. Note: TotalHits is copied from the original FacetsCollector.MatchingDocs , scores is set to null Declaration public override IList<FacetsCollector.MatchingDocs> GetMatchingDocs() Returns Type Description System.Collections.Generic.IList < FacetsCollector.MatchingDocs > Overrides FacetsCollector.GetMatchingDocs() | Improve this Doc View Source GetOriginalMatchingDocs() Returns the original matching documents. Declaration public virtual IList<FacetsCollector.MatchingDocs> GetOriginalMatchingDocs() Returns Type Description System.Collections.Generic.IList < FacetsCollector.MatchingDocs > Implements Lucene.Net.Search.ICollector"
  },
  "Lucene.Net.Facet.Range.DoubleRange.html": {
    "href": "Lucene.Net.Facet.Range.DoubleRange.html",
    "title": "Class DoubleRange | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DoubleRange Represents a range over double values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Range DoubleRange Inherited Members Range.Label Range.GetFilter(ValueSource) Range.FailNoMatch() 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) Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public sealed class DoubleRange : Range Constructors | Improve this Doc View Source DoubleRange(String, Double, Boolean, Double, Boolean) Create a DoubleRange. Declaration public DoubleRange(string label, double minIn, bool minInclusive, double maxIn, bool maxInclusive) Parameters Type Name Description System.String label System.Double minIn System.Boolean minInclusive System.Double maxIn System.Boolean maxInclusive Properties | Improve this Doc View Source Max Maximum. Declaration public double Max { get; } Property Value Type Description System.Double | Improve this Doc View Source MaxInclusive True if the maximum value is inclusive. Declaration public bool MaxInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Min Minimum. Declaration public double Min { get; } Property Value Type Description System.Double | Improve this Doc View Source MinInclusive True if the minimum value is inclusive. Declaration public bool MinInclusive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept(Double) True if this range accepts the provided value. Declaration public bool Accept(double value) Parameters Type Name Description System.Double value Returns Type Description System.Boolean | Improve this Doc View Source GetFilter(Filter, ValueSource) Declaration public override Filter GetFilter(Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Lucene.Net.Search.Filter fastMatchFilter Lucene.Net.Queries.Function.ValueSource valueSource Returns Type Description Lucene.Net.Search.Filter Overrides Range.GetFilter(Filter, ValueSource) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html": {
    "href": "Lucene.Net.Facet.Range.DoubleRangeFacetCounts.html",
    "title": "Class DoubleRangeFacetCounts | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided Lucene.Net.Queries.Function.ValueSource , using Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32) or Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32,System.Double[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). If you had indexed your field using SingleDocValuesField then pass Lucene.Net.Queries.Function.ValueSources.SingleFieldSource as the Lucene.Net.Queries.Function.ValueSource ; if you used DoubleDocValuesField then pass Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource (this is the default used when you pass just a the field name). @lucene.experimental Inheritance System.Object Facets RangeFacetCounts DoubleRangeFacetCounts Inherited Members RangeFacetCounts.m_ranges RangeFacetCounts.m_counts RangeFacetCounts.m_fastMatchFilter RangeFacetCounts.m_field RangeFacetCounts.m_totCount RangeFacetCounts.GetTopChildren(Int32, String, String[]) RangeFacetCounts.GetSpecificValue(String, String[]) RangeFacetCounts.GetAllDims(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.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public class DoubleRangeFacetCounts : RangeFacetCounts Constructors | Improve this Doc View Source DoubleRangeFacetCounts(String, FacetsCollector, DoubleRange[]) Create RangeFacetCounts , using Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource from the specified field. Declaration public DoubleRangeFacetCounts(string field, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, DoubleRange[]) Create RangeFacetCounts , using the provided Lucene.Net.Queries.Function.ValueSource . Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params DoubleRange[] ranges) Parameters Type Name Description System.String field Lucene.Net.Queries.Function.ValueSource valueSource FacetsCollector hits DoubleRange [] ranges | Improve this Doc View Source DoubleRangeFacetCounts(String, ValueSource, FacetsCollector, Filter, DoubleRange[]) Create RangeFacetCounts , using the provided Lucene.Net.Queries.Function.ValueSource , and using the provided Filter as a fastmatch: only documents passing the filter are checked for the matching ranges. The filter must be random access (implement Bits ). Declaration public DoubleRangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, Filter fastMatchFilter, params DoubleRange[] ranges) Parameters Type Name Description System.String field Lucene.Net.Queries.Function.ValueSource valueSource FacetsCollector hits Lucene.Net.Search.Filter fastMatchFilter DoubleRange [] ranges"
  },
  "Lucene.Net.Facet.Range.html": {
    "href": "Lucene.Net.Facet.Range.html",
    "title": "Namespace Lucene.Net.Facet.Range | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Range <!-- 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. --> Provides range faceting capabilities. Classes DoubleRange Represents a range over double values. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DoubleRangeFacetCounts Facets implementation that computes counts for dynamic double ranges from a provided Lucene.Net.Queries.Function.ValueSource , using Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32) or Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32,System.Double[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). If you had indexed your field using SingleDocValuesField then pass Lucene.Net.Queries.Function.ValueSources.SingleFieldSource as the Lucene.Net.Queries.Function.ValueSource ; if you used DoubleDocValuesField then pass Lucene.Net.Queries.Function.ValueSources.DoubleFieldSource (this is the default used when you pass just a the field name). @lucene.experimental Int64Range Represents a range over System.Int64 values. NOTE: This was LongRange in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided Lucene.Net.Queries.Function.ValueSource , using Lucene.Net.Queries.Function.FunctionValues.Int64Val(System.Int32) or Lucene.Net.Queries.Function.FunctionValues.Int64Val(System.Int32,System.Int64[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). NOTE: This was LongRangeFacetCounts in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Range Base class for a single labeled range. This is a Lucene.NET EXPERIMENTAL API, use at your own risk RangeFacetCounts Base class for range faceting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Facet.Range.Int64Range.html": {
    "href": "Lucene.Net.Facet.Range.Int64Range.html",
    "title": "Class Int64Range | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int64Range Represents a range over System.Int64 values. NOTE: This was LongRange in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Range Int64Range Inherited Members Range.Label Range.GetFilter(ValueSource) Range.FailNoMatch() 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) Namespace : Lucene.Net.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public sealed class Int64Range : Range Constructors | Improve this Doc View Source Int64Range(String, Int64, Boolean, Int64, Boolean) Create a Int64Range . Declaration public Int64Range(string label, long minIn, bool minInclusive, long maxIn, bool maxInclusive) Parameters Type Name Description System.String label System.Int64 minIn System.Boolean minInclusive System.Int64 maxIn System.Boolean maxInclusive Properties | Improve this Doc View Source Max Maximum. Declaration public long Max { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MaxInclusive True if the maximum value is inclusive. Declaration public bool MaxInclusive { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Min Minimum. Declaration public long Min { get; } Property Value Type Description System.Int64 | Improve this Doc View Source MinInclusive True if the minimum value is inclusive. Declaration public bool MinInclusive { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Accept(Int64) True if this range accepts the provided value. Declaration public bool Accept(long value) Parameters Type Name Description System.Int64 value Returns Type Description System.Boolean | Improve this Doc View Source GetFilter(Filter, ValueSource) Declaration public override Filter GetFilter(Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Lucene.Net.Search.Filter fastMatchFilter Lucene.Net.Queries.Function.ValueSource valueSource Returns Type Description Lucene.Net.Search.Filter Overrides Range.GetFilter(Filter, ValueSource) | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString()"
  },
  "Lucene.Net.Facet.Range.Int64RangeFacetCounts.html": {
    "href": "Lucene.Net.Facet.Range.Int64RangeFacetCounts.html",
    "title": "Class Int64RangeFacetCounts | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int64RangeFacetCounts Facets implementation that computes counts for dynamic long ranges from a provided Lucene.Net.Queries.Function.ValueSource , using Lucene.Net.Queries.Function.FunctionValues.Int64Val(System.Int32) or Lucene.Net.Queries.Function.FunctionValues.Int64Val(System.Int32,System.Int64[]) . Use this for dimensions that change in real-time (e.g. a relative time based dimension like \"Past day\", \"Past 2 days\", etc.) or that change for each request (e.g. distance from the user's location, \"< 1 km\", \"< 2 km\", etc.). NOTE: This was LongRangeFacetCounts in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets RangeFacetCounts Int64RangeFacetCounts Inherited Members RangeFacetCounts.m_ranges RangeFacetCounts.m_counts RangeFacetCounts.m_fastMatchFilter RangeFacetCounts.m_field RangeFacetCounts.m_totCount RangeFacetCounts.GetTopChildren(Int32, String, String[]) RangeFacetCounts.GetSpecificValue(String, String[]) RangeFacetCounts.GetAllDims(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.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public class Int64RangeFacetCounts : RangeFacetCounts Constructors | Improve this Doc View Source Int64RangeFacetCounts(String, FacetsCollector, Int64Range[]) Create Int64RangeFacetCounts , using Lucene.Net.Queries.Function.ValueSources.Int64FieldSource from the specified field. Declaration public Int64RangeFacetCounts(string field, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Int64Range[]) Create Int64RangeFacetCounts , using the provided Lucene.Net.Queries.Function.ValueSource . Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, params Int64Range[] ranges) Parameters Type Name Description System.String field Lucene.Net.Queries.Function.ValueSource valueSource FacetsCollector hits Int64Range [] ranges | Improve this Doc View Source Int64RangeFacetCounts(String, ValueSource, FacetsCollector, Filter, Int64Range[]) Create Int64RangeFacetCounts , using the provided Lucene.Net.Queries.Function.ValueSource , and using the provided Filter as a fastmatch: only documents passing the filter are checked for the matching ranges. The filter must be random access (implement Bits ). Declaration public Int64RangeFacetCounts(string field, ValueSource valueSource, FacetsCollector hits, Filter fastMatchFilter, params Int64Range[] ranges) Parameters Type Name Description System.String field Lucene.Net.Queries.Function.ValueSource valueSource FacetsCollector hits Lucene.Net.Search.Filter fastMatchFilter Int64Range [] ranges"
  },
  "Lucene.Net.Facet.Range.Range.html": {
    "href": "Lucene.Net.Facet.Range.Range.html",
    "title": "Class Range | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Range Base class for a single labeled range. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Range DoubleRange Int64Range 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.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public abstract class Range Constructors | Improve this Doc View Source Range(String) Sole constructor. Declaration protected Range(string label) Parameters Type Name Description System.String label Properties | Improve this Doc View Source Label Label that identifies this range. Declaration public string Label { get; } Property Value Type Description System.String Methods | Improve this Doc View Source FailNoMatch() Invoke this for a useless range. Declaration protected virtual void FailNoMatch() | Improve this Doc View Source GetFilter(ValueSource) Returns a new Lucene.Net.Search.Filter accepting only documents in this range. This filter is not general-purpose; you should either use it with DrillSideways by adding it to Add(String, Filter) , or pass it to FilteredQuery using its QUERY_FIRST_FILTER_STRATEGY . If the Lucene.Net.Queries.Function.ValueSource is static, e.g. an indexed numeric field, then it may be more efficient to use NumericRangeFilter . Declaration public virtual Filter GetFilter(ValueSource valueSource) Parameters Type Name Description Lucene.Net.Queries.Function.ValueSource valueSource Returns Type Description Lucene.Net.Search.Filter | Improve this Doc View Source GetFilter(Filter, ValueSource) Returns a new Lucene.Net.Search.Filter accepting only documents in this range. This filter is not general-purpose; you should either use it with DrillSideways by adding it to Add(String, Filter) , or pass it to FilteredQuery using its QUERY_FIRST_FILTER_STRATEGY . If the Lucene.Net.Queries.Function.ValueSource is static, e.g. an indexed numeric field, then it may be more efficient to use NumericRangeFilter . The provided fastMatchFilter , if non-null, will first be consulted, and only if that is set for each document will the range then be checked. Declaration public abstract Filter GetFilter(Filter fastMatchFilter, ValueSource valueSource) Parameters Type Name Description Lucene.Net.Search.Filter fastMatchFilter Lucene.Net.Queries.Function.ValueSource valueSource Returns Type Description Lucene.Net.Search.Filter"
  },
  "Lucene.Net.Facet.Range.RangeFacetCounts.html": {
    "href": "Lucene.Net.Facet.Range.RangeFacetCounts.html",
    "title": "Class RangeFacetCounts | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class RangeFacetCounts Base class for range faceting. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets RangeFacetCounts DoubleRangeFacetCounts Int64RangeFacetCounts 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.Facet.Range Assembly : Lucene.Net.Facet.dll Syntax public abstract class RangeFacetCounts : Facets Constructors | Improve this Doc View Source RangeFacetCounts(String, Range[], Filter) Create RangeFacetCounts Declaration protected RangeFacetCounts(string field, Range[] ranges, Filter fastMatchFilter) Parameters Type Name Description System.String field Range [] ranges Lucene.Net.Search.Filter fastMatchFilter Fields | Improve this Doc View Source m_counts Counts, initialized in by subclass. Declaration protected readonly int[] m_counts Field Value Type Description System.Int32 [] | Improve this Doc View Source m_fastMatchFilter Optional: if specified, we first test this Filter to see whether the document should be checked for matching ranges. If this is null, all documents are checked. Declaration protected readonly Filter m_fastMatchFilter Field Value Type Description Lucene.Net.Search.Filter | Improve this Doc View Source m_field Our field name. Declaration protected readonly string m_field Field Value Type Description System.String | Improve this Doc View Source m_ranges Ranges passed to constructor. Declaration protected readonly Range[] m_ranges Field Value Type Description Range [] | Improve this Doc View Source m_totCount Total number of hits. Declaration protected int m_totCount Field Value Type Description System.Int32 Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html": {
    "href": "Lucene.Net.Facet.SortedSet.DefaultSortedSetDocValuesReaderState.html",
    "title": "Class DefaultSortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DefaultSortedSetDocValuesReaderState Default implementation of SortedSetDocValuesFacetCounts Inheritance System.Object SortedSetDocValuesReaderState DefaultSortedSetDocValuesReaderState 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.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class DefaultSortedSetDocValuesReaderState : SortedSetDocValuesReaderState Constructors | Improve this Doc View Source DefaultSortedSetDocValuesReaderState(IndexReader, String) Creates this, pulling doc values from the specified field. Declaration public DefaultSortedSetDocValuesReaderState(IndexReader reader, string field = \"$facets\") Parameters Type Name Description Lucene.Net.Index.IndexReader reader System.String field Properties | Improve this Doc View Source Count Number of unique labels. Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides SortedSetDocValuesReaderState.Count | Improve this Doc View Source Field Indexed field we are reading. Declaration public override string Field { get; } Property Value Type Description System.String Overrides SortedSetDocValuesReaderState.Field | Improve this Doc View Source OrigReader Declaration public override IndexReader OrigReader { get; } Property Value Type Description Lucene.Net.Index.IndexReader Overrides SortedSetDocValuesReaderState.OrigReader | Improve this Doc View Source PrefixToOrdRange Returns mapping from prefix to SortedSetDocValuesReaderState.OrdRange . Declaration public override IDictionary<string, SortedSetDocValuesReaderState.OrdRange> PrefixToOrdRange { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , SortedSetDocValuesReaderState.OrdRange > Overrides SortedSetDocValuesReaderState.PrefixToOrdRange Methods | Improve this Doc View Source GetDocValues() Return top-level doc values. Declaration public override SortedSetDocValues GetDocValues() Returns Type Description Lucene.Net.Index.SortedSetDocValues Overrides SortedSetDocValuesReaderState.GetDocValues() | Improve this Doc View Source GetOrdRange(String) Returns the SortedSetDocValuesReaderState.OrdRange for this dimension. Declaration public override SortedSetDocValuesReaderState.OrdRange GetOrdRange(string dim) Parameters Type Name Description System.String dim Returns Type Description SortedSetDocValuesReaderState.OrdRange Overrides SortedSetDocValuesReaderState.GetOrdRange(String)"
  },
  "Lucene.Net.Facet.SortedSet.html": {
    "href": "Lucene.Net.Facet.SortedSet.html",
    "title": "Namespace Lucene.Net.Facet.SortedSet | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.SortedSet <!-- 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. --> Provides faceting capabilities over facets that were indexed with <xref:Lucene.Net.Facet.Sortedset.SortedSetDocValuesFacetField>. Classes DefaultSortedSetDocValuesReaderState Default implementation of SortedSetDocValuesFacetCounts SortedSetDocValuesFacetCounts Compute facets counts from previously indexed SortedSetDocValuesFacetField , without require a separate taxonomy index. Faceting is a bit slower (~25%), and there is added cost on every Lucene.Net.Index.IndexReader open to create a new SortedSetDocValuesReaderState . Furthermore, this does not support hierarchical facets; only flat (dimension + label) facets, but it uses quite a bit less RAM to do so. NOTE : this class should be instantiated and then used from a single thread, because it holds a thread-private instance of Lucene.Net.Index.SortedSetDocValues . NOTE: : tie-break is by unicode sort order @lucene.experimental SortedSetDocValuesFacetField Add an instance of this to your Lucene.Net.Documents.Document for every facet label to be indexed via Lucene.Net.Index.SortedSetDocValues . SortedSetDocValuesReaderState Wraps a Lucene.Net.Index.IndexReader and resolves ords using existing Lucene.Net.Index.SortedSetDocValues APIs without a separate taxonomy index. This only supports flat facets (dimension + label), and it makes faceting a bit slower, adds some cost at reopen time, but avoids managing the separate taxonomy index. It also requires less RAM than the taxonomy index, as it manages the flat (2-level) hierarchy more efficiently. In addition, the tie-break during faceting is now meaningful (in label sorted order). NOTE : creating an instance of this class is somewhat costly, as it computes per-segment ordinal maps, so you should create it once and re-use that one instance for a given Lucene.Net.Index.IndexReader . SortedSetDocValuesReaderState.OrdRange Holds start/end range of ords, which maps to one dimension (someday we may generalize it to map to hierarchies within one dimension)."
  },
  "Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html": {
    "href": "Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetCounts.html",
    "title": "Class SortedSetDocValuesFacetCounts | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SortedSetDocValuesFacetCounts Compute facets counts from previously indexed SortedSetDocValuesFacetField , without require a separate taxonomy index. Faceting is a bit slower (~25%), and there is added cost on every Lucene.Net.Index.IndexReader open to create a new SortedSetDocValuesReaderState . Furthermore, this does not support hierarchical facets; only flat (dimension + label) facets, but it uses quite a bit less RAM to do so. NOTE : this class should be instantiated and then used from a single thread, because it holds a thread-private instance of Lucene.Net.Index.SortedSetDocValues . NOTE: : tie-break is by unicode sort order @lucene.experimental Inheritance System.Object Facets SortedSetDocValuesFacetCounts 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.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class SortedSetDocValuesFacetCounts : Facets Constructors | Improve this Doc View Source SortedSetDocValuesFacetCounts(SortedSetDocValuesReaderState, FacetsCollector) Sparse faceting: returns any dimension that had any hits, topCount labels per dimension. Declaration public SortedSetDocValuesFacetCounts(SortedSetDocValuesReaderState state, FacetsCollector hits) Parameters Type Name Description SortedSetDocValuesReaderState state FacetsCollector hits Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[])"
  },
  "Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html": {
    "href": "Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField.html",
    "title": "Class SortedSetDocValuesFacetField | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SortedSetDocValuesFacetField Add an instance of this to your Lucene.Net.Documents.Document for every facet label to be indexed via Lucene.Net.Index.SortedSetDocValues . Inheritance System.Object Lucene.Net.Documents.Field SortedSetDocValuesFacetField Implements Lucene.Net.Index.IIndexableField Inherited Members Lucene.Net.Documents.Field.m_type Lucene.Net.Documents.Field.m_name Lucene.Net.Documents.Field.FieldsData Lucene.Net.Documents.Field.m_tokenStream Lucene.Net.Documents.Field.m_boost Lucene.Net.Documents.Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Lucene.Net.Documents.Field.GetReaderValue() Lucene.Net.Documents.Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Lucene.Net.Documents.Field.SetBytesValue(Lucene.Net.Util.BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Lucene.Net.Documents.Field.SetTokenStream(Lucene.Net.Analysis.TokenStream) Lucene.Net.Documents.Field.Name Lucene.Net.Documents.Field.Boost Lucene.Net.Documents.Field.GetNumericValue() Lucene.Net.Documents.Field.NumericType Lucene.Net.Documents.Field.GetByteValue() Lucene.Net.Documents.Field.GetInt16Value() Lucene.Net.Documents.Field.GetInt32Value() Lucene.Net.Documents.Field.GetInt64Value() Lucene.Net.Documents.Field.GetSingleValue() Lucene.Net.Documents.Field.GetDoubleValue() Lucene.Net.Documents.Field.GetBinaryValue() Lucene.Net.Documents.Field.FieldType Lucene.Net.Documents.Field.IndexableFieldType Lucene.Net.Documents.Field.GetTokenStream(Lucene.Net.Analysis.Analyzer) Lucene.Net.Documents.Field.TranslateFieldType(Lucene.Net.Documents.Field.Store, Lucene.Net.Documents.Field.Index, Lucene.Net.Documents.Field.TermVector) 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) Namespace : Lucene.Net.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public class SortedSetDocValuesFacetField : Field, IIndexableField Constructors | Improve this Doc View Source SortedSetDocValuesFacetField(String, String) Sole constructor. Declaration public SortedSetDocValuesFacetField(string dim, string label) Parameters Type Name Description System.String dim System.String label Fields | Improve this Doc View Source TYPE Indexed Lucene.Net.Documents.FieldType . Declaration public static readonly FieldType TYPE Field Value Type Description Lucene.Net.Documents.FieldType Properties | Improve this Doc View Source Dim Dimension. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Label Label. Declaration public string Label { get; } Property Value Type Description System.String Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Documents.Field.ToString() Implements Lucene.Net.Index.IIndexableField"
  },
  "Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html": {
    "href": "Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.html",
    "title": "Class SortedSetDocValuesReaderState | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState Wraps a Lucene.Net.Index.IndexReader and resolves ords using existing Lucene.Net.Index.SortedSetDocValues APIs without a separate taxonomy index. This only supports flat facets (dimension + label), and it makes faceting a bit slower, adds some cost at reopen time, but avoids managing the separate taxonomy index. It also requires less RAM than the taxonomy index, as it manages the flat (2-level) hierarchy more efficiently. In addition, the tie-break during faceting is now meaningful (in label sorted order). NOTE : creating an instance of this class is somewhat costly, as it computes per-segment ordinal maps, so you should create it once and re-use that one instance for a given Lucene.Net.Index.IndexReader . Inheritance System.Object SortedSetDocValuesReaderState DefaultSortedSetDocValuesReaderState 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.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public abstract class SortedSetDocValuesReaderState Constructors | Improve this Doc View Source SortedSetDocValuesReaderState() Sole constructor. Declaration protected SortedSetDocValuesReaderState() Properties | Improve this Doc View Source Count Number of unique labels. Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Field Indexed field we are reading. Declaration public abstract string Field { get; } Property Value Type Description System.String | Improve this Doc View Source OrigReader Returns top-level index reader. Declaration public abstract IndexReader OrigReader { get; } Property Value Type Description Lucene.Net.Index.IndexReader | Improve this Doc View Source PrefixToOrdRange Returns mapping from prefix to SortedSetDocValuesReaderState.OrdRange . Declaration public abstract IDictionary<string, SortedSetDocValuesReaderState.OrdRange> PrefixToOrdRange { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , SortedSetDocValuesReaderState.OrdRange > Methods | Improve this Doc View Source GetDocValues() Return top-level doc values. Declaration public abstract SortedSetDocValues GetDocValues() Returns Type Description Lucene.Net.Index.SortedSetDocValues | Improve this Doc View Source GetOrdRange(String) Returns the SortedSetDocValuesReaderState.OrdRange for this dimension. Declaration public abstract SortedSetDocValuesReaderState.OrdRange GetOrdRange(string dim) Parameters Type Name Description System.String dim Returns Type Description SortedSetDocValuesReaderState.OrdRange"
  },
  "Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html": {
    "href": "Lucene.Net.Facet.SortedSet.SortedSetDocValuesReaderState.OrdRange.html",
    "title": "Class SortedSetDocValuesReaderState.OrdRange | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SortedSetDocValuesReaderState.OrdRange Holds start/end range of ords, which maps to one dimension (someday we may generalize it to map to hierarchies within one dimension). Inheritance System.Object SortedSetDocValuesReaderState.OrdRange 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.Facet.SortedSet Assembly : Lucene.Net.Facet.dll Syntax public sealed class OrdRange Constructors | Improve this Doc View Source OrdRange(Int32, Int32) Start and end are inclusive. Declaration public OrdRange(int start, int end) Parameters Type Name Description System.Int32 start System.Int32 end Properties | Improve this Doc View Source End End of range, inclusive: Declaration public int End { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Start Start of range, inclusive: Declaration public int Start { get; } Property Value Type Description System.Int32"
  },
  "Lucene.Net.Facet.Taxonomy.AssociationFacetField.html": {
    "href": "Lucene.Net.Facet.Taxonomy.AssociationFacetField.html",
    "title": "Class AssociationFacetField | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class AssociationFacetField Add an instance of this to your Lucene.Net.Documents.Document to add a facet label associated with an arbitrary byte[] . This will require a custom Facets implementation at search time; see Int32AssociationFacetField and SingleAssociationFacetField to use existing Facets implementations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Documents.Field AssociationFacetField Int32AssociationFacetField SingleAssociationFacetField Implements Lucene.Net.Index.IIndexableField Inherited Members Lucene.Net.Documents.Field.m_type Lucene.Net.Documents.Field.m_name Lucene.Net.Documents.Field.FieldsData Lucene.Net.Documents.Field.m_tokenStream Lucene.Net.Documents.Field.m_boost Lucene.Net.Documents.Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Lucene.Net.Documents.Field.GetReaderValue() Lucene.Net.Documents.Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Lucene.Net.Documents.Field.SetBytesValue(Lucene.Net.Util.BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Lucene.Net.Documents.Field.SetTokenStream(Lucene.Net.Analysis.TokenStream) Lucene.Net.Documents.Field.Name Lucene.Net.Documents.Field.Boost Lucene.Net.Documents.Field.GetNumericValue() Lucene.Net.Documents.Field.NumericType Lucene.Net.Documents.Field.GetByteValue() Lucene.Net.Documents.Field.GetInt16Value() Lucene.Net.Documents.Field.GetInt32Value() Lucene.Net.Documents.Field.GetInt64Value() Lucene.Net.Documents.Field.GetSingleValue() Lucene.Net.Documents.Field.GetDoubleValue() Lucene.Net.Documents.Field.GetBinaryValue() Lucene.Net.Documents.Field.FieldType Lucene.Net.Documents.Field.IndexableFieldType Lucene.Net.Documents.Field.GetTokenStream(Lucene.Net.Analysis.Analyzer) Lucene.Net.Documents.Field.TranslateFieldType(Lucene.Net.Documents.Field.Store, Lucene.Net.Documents.Field.Index, Lucene.Net.Documents.Field.TermVector) 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) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class AssociationFacetField : Field, IIndexableField Constructors | Improve this Doc View Source AssociationFacetField(BytesRef, String, String[]) Creates this from dim and path and an association Declaration public AssociationFacetField(BytesRef assoc, string dim, params string[] path) Parameters Type Name Description Lucene.Net.Util.BytesRef assoc System.String dim System.String [] path Fields | Improve this Doc View Source TYPE Indexed Lucene.Net.Documents.FieldType . Declaration public static readonly FieldType TYPE Field Value Type Description Lucene.Net.Documents.FieldType Properties | Improve this Doc View Source Assoc Associated value. Declaration public BytesRef Assoc { get; } Property Value Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source Dim Dimension for this field. Declaration public string Dim { get; } Property Value Type Description System.String | Improve this Doc View Source Path Facet path for this field. Declaration public string[] Path { get; } Property Value Type Description System.String [] Methods | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides Lucene.Net.Documents.Field.ToString() Implements Lucene.Net.Index.IIndexableField"
  },
  "Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html": {
    "href": "Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.CachedOrds.html",
    "title": "Class CachedOrdinalsReader.CachedOrds | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. Inheritance System.Object CachedOrdinalsReader.CachedOrds Implements Lucene.Net.Util.IAccountable 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public sealed class CachedOrds : IAccountable Constructors | Improve this Doc View Source CachedOrds(OrdinalsReader.OrdinalsSegmentReader, Int32) Creates a new CachedOrdinalsReader.CachedOrds from the BinaryDocValues . Assumes that the BinaryDocValues is not null . Declaration public CachedOrds(OrdinalsReader.OrdinalsSegmentReader source, int maxDoc) Parameters Type Name Description OrdinalsReader.OrdinalsSegmentReader source System.Int32 maxDoc Properties | Improve this Doc View Source Offsets Index into Ordinals for each document. Declaration public int[] Offsets { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Ordinals Holds ords for all docs. Declaration public int[] Ordinals { get; } Property Value Type Description System.Int32 [] Methods | Improve this Doc View Source RamBytesUsed() Declaration public long RamBytesUsed() Returns Type Description System.Int64 Implements Lucene.Net.Util.IAccountable"
  },
  "Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html": {
    "href": "Lucene.Net.Facet.Taxonomy.CachedOrdinalsReader.html",
    "title": "Class CachedOrdinalsReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class CachedOrdinalsReader A per-segment cache of documents' facet ordinals. Every CachedOrdinalsReader.CachedOrds holds the ordinals in a raw int[] , and therefore consumes as much RAM as the total number of ordinals found in the segment, but saves the CPU cost of decoding ordinals during facet counting. NOTE: every CachedOrdinalsReader.CachedOrds is limited to 2.1B total ordinals. If that is a limitation for you then consider limiting the segment size to fewer documents, or use an alternative cache which pages through the category ordinals. NOTE: when using this cache, it is advised to use a DocValuesFormat that does not cache the data in memory, at least for the category lists fields, or otherwise you'll be doing double-caching. NOTE: create one instance of this and re-use it for all facet implementations (the cache is per-instance, not static). Inheritance System.Object OrdinalsReader CachedOrdinalsReader Implements Lucene.Net.Util.IAccountable 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class CachedOrdinalsReader : OrdinalsReader, IAccountable Constructors | Improve this Doc View Source CachedOrdinalsReader(OrdinalsReader) Sole constructor. Declaration public CachedOrdinalsReader(OrdinalsReader source) Parameters Type Name Description OrdinalsReader source Properties | Improve this Doc View Source IndexFieldName Declaration public override string IndexFieldName { get; } Property Value Type Description System.String Overrides OrdinalsReader.IndexFieldName Methods | Improve this Doc View Source GetReader(AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(AtomicReaderContext) | Improve this Doc View Source RamBytesUsed() Declaration public virtual long RamBytesUsed() Returns Type Description System.Int64 Implements Lucene.Net.Util.IAccountable"
  },
  "Lucene.Net.Facet.Taxonomy.CategoryPath.html": {
    "href": "Lucene.Net.Facet.Taxonomy.CategoryPath.html",
    "title": "Class CategoryPath | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class CategoryPath Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CategoryPath Implements System.IComparable < CategoryPath > 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class CategoryPath : IComparable<CategoryPath> Constructors | Improve this Doc View Source CategoryPath(String, Char) Construct from a given path, separating path components with delimiter . Declaration public CategoryPath(string pathString, char delimiter) Parameters Type Name Description System.String pathString System.Char delimiter | Improve this Doc View Source CategoryPath(String[]) Construct from the given path components . Declaration public CategoryPath(params string[] components) Parameters Type Name Description System.String [] components Fields | Improve this Doc View Source EMPTY An empty CategoryPath Declaration public static readonly CategoryPath EMPTY Field Value Type Description CategoryPath Properties | Improve this Doc View Source Components The components of this CategoryPath . Note that this array may be shared with other CategoryPath instances, e.g. as a result of Subpath(Int32) , therefore you should traverse the array up to Length for this path's components. Declaration public string[] Components { get; } Property Value Type Description System.String [] | Improve this Doc View Source FullPathLength Returns the number of characters needed to represent the path, including delimiter characters, for using with CopyFullPath(Char[], Int32, Char) . Declaration public virtual int FullPathLength { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Length The number of components of this CategoryPath . Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(CategoryPath) Compares this path with another CategoryPath for lexicographic order. Declaration public virtual int CompareTo(CategoryPath other) Parameters Type Name Description CategoryPath other Returns Type Description System.Int32 | Improve this Doc View Source CopyFullPath(Char[], Int32, Char) Copies the path components to the given char[] , starting at index start . delimiter is copied between the path components. Returns the number of chars copied. NOTE: this method relies on the array being large enough to hold the components and separators - the amount of needed space can be calculated with FullPathLength . Declaration public virtual int CopyFullPath(char[] buf, int start, char delimiter) Parameters Type Name Description System.Char [] buf System.Int32 start System.Char delimiter Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj 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 Int64HashCode() Calculate a 64-bit hash function for this path. NOTE: This was longHashCode() in Lucene Declaration public virtual long Int64HashCode() Returns Type Description System.Int64 | Improve this Doc View Source Subpath(Int32) Returns a sub-path of this path up to length components. Declaration public virtual CategoryPath Subpath(int length) Parameters Type Name Description System.Int32 length Returns Type Description CategoryPath | Improve this Doc View Source ToString() Returns a string representation of the path, separating components with '/'. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() See Also ToString(Char) | Improve this Doc View Source ToString(Char) Returns a string representation of the path, separating components with the given delimiter. Declaration public virtual string ToString(char delimiter) Parameters Type Name Description System.Char delimiter Returns Type Description System.String Operators | Improve this Doc View Source Equality(CategoryPath, CategoryPath) Declaration public static bool operator ==(CategoryPath left, CategoryPath right) Parameters Type Name Description CategoryPath left CategoryPath right Returns Type Description System.Boolean | Improve this Doc View Source GreaterThan(CategoryPath, CategoryPath) Declaration public static bool operator>(CategoryPath left, CategoryPath right) Parameters Type Name Description CategoryPath left CategoryPath right Returns Type Description System.Boolean | Improve this Doc View Source GreaterThanOrEqual(CategoryPath, CategoryPath) Declaration public static bool operator >=(CategoryPath left, CategoryPath right) Parameters Type Name Description CategoryPath left CategoryPath right Returns Type Description System.Boolean | Improve this Doc View Source Inequality(CategoryPath, CategoryPath) Declaration public static bool operator !=(CategoryPath left, CategoryPath right) Parameters Type Name Description CategoryPath left CategoryPath right Returns Type Description System.Boolean | Improve this Doc View Source LessThan(CategoryPath, CategoryPath) Declaration public static bool operator <(CategoryPath left, CategoryPath right) Parameters Type Name Description CategoryPath left CategoryPath right Returns Type Description System.Boolean | Improve this Doc View Source LessThanOrEqual(CategoryPath, CategoryPath) Declaration public static bool operator <=(CategoryPath left, CategoryPath right) Parameters Type Name Description CategoryPath left CategoryPath right Returns Type Description System.Boolean Implements System.IComparable<T>"
  },
  "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.html",
    "title": "Class DirectoryTaxonomyReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a Lucene.Net.Store.Directory . Reading from the on-disk index on every method call is too slow, so this implementation employs caching: Some methods cache recent requests and their results, while other methods prefetch all the data into memory and then provide answers directly from in-memory tables. See the documentation of individual methods for comments on their performance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TaxonomyReader DirectoryTaxonomyReader Implements System.IDisposable Inherited Members TaxonomyReader.ROOT_ORDINAL TaxonomyReader.INVALID_ORDINAL TaxonomyReader.OpenIfChanged<T>(T) TaxonomyReader.EnsureOpen() TaxonomyReader.Dispose() TaxonomyReader.DecRef() TaxonomyReader.GetChildren(Int32) TaxonomyReader.GetOrdinal(String, String[]) TaxonomyReader.RefCount TaxonomyReader.IncRef() TaxonomyReader.TryIncRef() 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.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public class DirectoryTaxonomyReader : TaxonomyReader, IDisposable Constructors | Improve this Doc View Source DirectoryTaxonomyReader(DirectoryTaxonomyWriter) Opens a DirectoryTaxonomyReader over the given DirectoryTaxonomyWriter (for NRT). Declaration public DirectoryTaxonomyReader(DirectoryTaxonomyWriter taxoWriter) Parameters Type Name Description DirectoryTaxonomyWriter taxoWriter The DirectoryTaxonomyWriter from which to obtain newly added categories, in real-time. | Improve this Doc View Source DirectoryTaxonomyReader(Directory) Open for reading a taxonomy stored in a given Lucene.Net.Store.Directory . Declaration public DirectoryTaxonomyReader(Directory directory) Parameters Type Name Description Lucene.Net.Store.Directory directory The Lucene.Net.Store.Directory in which the taxonomy resides. Exceptions Type Condition CorruptIndexException if the Taxonomy is corrupt. System.IO.IOException if another error occurred. Properties | Improve this Doc View Source CommitUserData Declaration public override IDictionary<string, string> CommitUserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > Overrides TaxonomyReader.CommitUserData | Improve this Doc View Source Count Declaration public override int Count { get; } Property Value Type Description System.Int32 Overrides TaxonomyReader.Count | Improve this Doc View Source ParallelTaxonomyArrays Declaration public override ParallelTaxonomyArrays ParallelTaxonomyArrays { get; } Property Value Type Description ParallelTaxonomyArrays Overrides TaxonomyReader.ParallelTaxonomyArrays Methods | Improve this Doc View Source Dispose(Boolean) Declaration protected override void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing Overrides TaxonomyReader.Dispose(Boolean) | Improve this Doc View Source DoOpenIfChanged() Implements the opening of a new DirectoryTaxonomyReader instance if the taxonomy has changed. NOTE: the returned DirectoryTaxonomyReader shares the ordinal and category caches with this reader. This is not expected to cause any issues, unless the two instances continue to live. The reader guarantees that the two instances cannot affect each other in terms of correctness of the caches, however if the size of the cache is changed through SetCacheSize(Int32) , it will affect both reader instances. Declaration protected override TaxonomyReader DoOpenIfChanged() Returns Type Description TaxonomyReader Overrides TaxonomyReader.DoOpenIfChanged() | Improve this Doc View Source GetOrdinal(FacetLabel) Declaration public override int GetOrdinal(FacetLabel cp) Parameters Type Name Description FacetLabel cp Returns Type Description System.Int32 Overrides TaxonomyReader.GetOrdinal(FacetLabel) | Improve this Doc View Source GetPath(Int32) Declaration public override FacetLabel GetPath(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description FacetLabel Overrides TaxonomyReader.GetPath(Int32) | Improve this Doc View Source OpenIndexReader(IndexWriter) Open the Lucene.Net.Index.DirectoryReader from this Lucene.Net.Index.IndexWriter . Declaration protected virtual DirectoryReader OpenIndexReader(IndexWriter writer) Parameters Type Name Description Lucene.Net.Index.IndexWriter writer Returns Type Description Lucene.Net.Index.DirectoryReader | Improve this Doc View Source OpenIndexReader(Directory) Open the Lucene.Net.Index.DirectoryReader from this Lucene.Net.Store.Directory . Declaration protected virtual DirectoryReader OpenIndexReader(Directory directory) Parameters Type Name Description Lucene.Net.Store.Directory directory Returns Type Description Lucene.Net.Index.DirectoryReader | Improve this Doc View Source SetCacheSize(Int32) SetCacheSize(Int32) controls the maximum allowed size of each of the caches used by GetPath(Int32) and GetOrdinal(FacetLabel) . Currently, if the given size is smaller than the current size of a cache, it will not shrink, and rather we be limited to its current size. Declaration public virtual void SetCacheSize(int size) Parameters Type Name Description System.Int32 size The new maximum cache size, in number of entries. | Improve this Doc View Source ToString(Int32) Returns ordinal -> label mapping, up to the provided max ordinal or number of ordinals, whichever is smaller. Declaration public virtual string ToString(int max) Parameters Type Name Description System.Int32 max Returns Type Description System.String Implements System.IDisposable"
  },
  "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.DiskOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.DiskOrdinalMap | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter.DiskOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained on file system Inheritance System.Object DirectoryTaxonomyWriter.DiskOrdinalMap Implements DirectoryTaxonomyWriter.IOrdinalMap 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.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public sealed class DiskOrdinalMap : DirectoryTaxonomyWriter.IOrdinalMap Constructors | Improve this Doc View Source DiskOrdinalMap(String) Sole constructor. Declaration public DiskOrdinalMap(string tmpfile) Parameters Type Name Description System.String tmpfile Methods | Improve this Doc View Source AddDone() Declaration public void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Declaration public int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Declaration public void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize Implements DirectoryTaxonomyWriter.IOrdinalMap"
  },
  "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.html",
    "title": "Class DirectoryTaxonomyWriter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter ITaxonomyWriter which uses a Lucene.Net.Store.Directory to store the taxonomy information on disk, and keeps an additional in-memory cache of some or all categories. In addition to the permanently-stored information in the Lucene.Net.Store.Directory , efficiency dictates that we also keep an in-memory cache of recently seen or all categories, so that we do not need to go back to disk for every category addition to see which ordinal this category already has, if any. A ITaxonomyWriterCache object determines the specific caching algorithm used. This class offers some hooks for extending classes to control the Lucene.Net.Index.IndexWriter instance that is used. See OpenIndexWriter(Directory, IndexWriterConfig) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object DirectoryTaxonomyWriter Implements ITaxonomyWriter System.IDisposable Lucene.Net.Index.ITwoPhaseCommit 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.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public class DirectoryTaxonomyWriter : ITaxonomyWriter, IDisposable, ITwoPhaseCommit Constructors | Improve this Doc View Source DirectoryTaxonomyWriter(Directory) Create this with CREATE_OR_APPEND . Declaration public DirectoryTaxonomyWriter(Directory directory) Parameters Type Name Description Lucene.Net.Store.Directory directory | Improve this Doc View Source DirectoryTaxonomyWriter(Directory, OpenMode) Creates a new instance with a default cache as defined by DefaultTaxonomyWriterCache() . Declaration public DirectoryTaxonomyWriter(Directory directory, OpenMode openMode) Parameters Type Name Description Lucene.Net.Store.Directory directory Lucene.Net.Index.OpenMode openMode | Improve this Doc View Source DirectoryTaxonomyWriter(Directory, OpenMode, ITaxonomyWriterCache) Construct a Taxonomy writer. Declaration public DirectoryTaxonomyWriter(Directory directory, OpenMode openMode, ITaxonomyWriterCache cache) Parameters Type Name Description Lucene.Net.Store.Directory directory The Lucene.Net.Store.Directory in which to store the taxonomy. Note that the taxonomy is written directly to that directory (not to a subdirectory of it). Lucene.Net.Index.OpenMode openMode Specifies how to open a taxonomy for writing: APPEND means open an existing index for append (failing if the index does not yet exist). CREATE means create a new index (first deleting the old one if it already existed). CREATE_OR_APPEND appends to an existing index if there is one, otherwise it creates a new index. ITaxonomyWriterCache cache A ITaxonomyWriterCache implementation which determines the in-memory caching policy. See for example LruTaxonomyWriterCache and Cl2oTaxonomyWriterCache . If null or missing, DefaultTaxonomyWriterCache() is used. Exceptions Type Condition CorruptIndexException if the taxonomy is corrupted. LockObtainFailedException if the taxonomy is locked by another writer. If it is known that no other concurrent writer is active, the lock might have been left around by an old dead process, and should be removed using Unlock(Directory) . System.IO.IOException if another error occurred. Fields | Improve this Doc View Source INDEX_EPOCH Property name of user commit data that contains the index epoch. The epoch changes whenever the taxonomy is recreated (i.e. opened with CREATE . Applications should not use this property in their commit data because it will be overridden by this taxonomy writer. Declaration public const string INDEX_EPOCH = \"index.epoch\" Field Value Type Description System.String Properties | Improve this Doc View Source CommitData Declaration public virtual IDictionary<string, string> CommitData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Directory Returns the Lucene.Net.Store.Directory of this taxonomy writer. Declaration public virtual Directory Directory { get; } Property Value Type Description Lucene.Net.Store.Directory | Improve this Doc View Source TaxonomyEpoch Expert: returns current index epoch, if this is a near-real-time reader. Used by DirectoryTaxonomyReader to support NRT. This is a Lucene.NET INTERNAL API, use at your own risk Declaration public long TaxonomyEpoch { get; } Property Value Type Description System.Int64 Methods | Improve this Doc View Source AddCategory(FacetLabel) Declaration public virtual int AddCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source AddTaxonomy(Directory, DirectoryTaxonomyWriter.IOrdinalMap) Takes the categories from the given taxonomy directory, and adds the missing ones to this taxonomy. Additionally, it fills the given DirectoryTaxonomyWriter.IOrdinalMap with a mapping from the original ordinal to the new ordinal. Declaration public virtual void AddTaxonomy(Directory taxoDir, DirectoryTaxonomyWriter.IOrdinalMap map) Parameters Type Name Description Lucene.Net.Store.Directory taxoDir DirectoryTaxonomyWriter.IOrdinalMap map | Improve this Doc View Source Commit() Declaration public virtual void Commit() | Improve this Doc View Source CreateIndexWriterConfig(OpenMode) Create the Lucene.Net.Index.IndexWriterConfig that would be used for opening the internal index writer. Extensions can configure the Lucene.Net.Index.IndexWriter as they see fit, including setting a MergeScheduler , or IndexDeletionPolicy , different RAM size etc. NOTE: internal docids of the configured index must not be altered. For that, categories are never deleted from the taxonomy index. In addition, merge policy in effect must not merge none adjacent segments. Declaration protected virtual IndexWriterConfig CreateIndexWriterConfig(OpenMode openMode) Parameters Type Name Description Lucene.Net.Index.OpenMode openMode see Lucene.Net.Index.OpenMode Returns Type Description Lucene.Net.Index.IndexWriterConfig See Also OpenIndexWriter(Directory, IndexWriterConfig) | Improve this Doc View Source DefaultTaxonomyWriterCache() Defines the default ITaxonomyWriterCache to use in constructors which do not specify one. The current default is Cl2oTaxonomyWriterCache constructed with the parameters (1024, 0.15f, 3), i.e., the entire taxonomy is cached in memory while building it. Declaration public static ITaxonomyWriterCache DefaultTaxonomyWriterCache() Returns Type Description ITaxonomyWriterCache | Improve this Doc View Source Dispose() Frees used resources as well as closes the underlying Lucene.Net.Index.IndexWriter , which commits whatever changes made to it to the underlying Lucene.Net.Store.Directory . Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) A hook for extending classes to close additional resources that were used. The default implementation closes the Lucene.Net.Index.IndexReader as well as the ITaxonomyWriterCache instances that were used. NOTE: if you override this method, you should include a base.Dispose(disposing) call in your implementation. Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source EnsureOpen() Verifies that this instance wasn't closed, or throws System.ObjectDisposedException if it is. Declaration protected void EnsureOpen() | Improve this Doc View Source FindCategory(FacetLabel) Look up the given category in the cache and/or the on-disk storage, returning the category's ordinal, or a negative number in case the category does not yet exist in the taxonomy. Declaration protected virtual int FindCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetParent(Int32) Declaration public virtual int GetParent(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description System.Int32 | Improve this Doc View Source OpenIndexWriter(Directory, IndexWriterConfig) Open internal index writer, which contains the taxonomy data. Extensions may provide their own Lucene.Net.Index.IndexWriter implementation or instance. NOTE: the instance this method returns will be disposed upon calling to Dispose() . NOTE: the merge policy in effect must not merge none adjacent segments. See comment in CreateIndexWriterConfig(OpenMode) for the logic behind this. Declaration protected virtual IndexWriter OpenIndexWriter(Directory directory, IndexWriterConfig config) Parameters Type Name Description Lucene.Net.Store.Directory directory the Lucene.Net.Store.Directory on top of which an Lucene.Net.Index.IndexWriter should be opened. Lucene.Net.Index.IndexWriterConfig config configuration for the internal index writer. Returns Type Description Lucene.Net.Index.IndexWriter See Also CreateIndexWriterConfig(OpenMode) | Improve this Doc View Source PrepareCommit() prepare most of the work needed for a two-phase commit. See PrepareCommit() . Declaration public virtual void PrepareCommit() | Improve this Doc View Source ReplaceTaxonomy(Directory) Replaces the current taxonomy with the given one. This method should generally be called in conjunction with AddIndexes(Directory[]) to replace both the taxonomy as well as the search index content. Declaration public virtual void ReplaceTaxonomy(Directory taxoDir) Parameters Type Name Description Lucene.Net.Store.Directory taxoDir | Improve this Doc View Source Rollback() Rollback changes to the taxonomy writer and closes the instance. Following this method the instance becomes unusable (calling any of its API methods will yield an System.ObjectDisposedException ). Declaration public virtual void Rollback() | Improve this Doc View Source SetCacheMissesUntilFill(Int32) Set the number of cache misses before an attempt is made to read the entire taxonomy into the in-memory cache. This taxonomy writer holds an in-memory cache of recently seen categories to speed up operation. On each cache-miss, the on-disk index needs to be consulted. When an existing taxonomy is opened, a lot of slow disk reads like that are needed until the cache is filled, so it is more efficient to read the entire taxonomy into memory at once. We do this complete read after a certain number (defined by this method) of cache misses. If the number is set to 0 , the entire taxonomy is read into the cache on first use, without fetching individual categories first. NOTE: it is assumed that this method is called immediately after the taxonomy writer has been created. Declaration public virtual void SetCacheMissesUntilFill(int i) Parameters Type Name Description System.Int32 i | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Declaration public virtual void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > commitUserData | Improve this Doc View Source Unlock(Directory) Forcibly unlocks the taxonomy in the named directory. Caution: this should only be used by failure recovery code, when it is known that no other process nor thread is in fact currently accessing this taxonomy. This method is unnecessary if your Lucene.Net.Store.Directory uses a NativeFSLockFactory instead of the default SimpleFSLockFactory . When the \"native\" lock is used, a lock does not stay behind forever when the process using it dies. Declaration public static void Unlock(Directory directory) Parameters Type Name Description Lucene.Net.Store.Directory directory Implements ITaxonomyWriter System.IDisposable Lucene.Net.Index.ITwoPhaseCommit"
  },
  "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.IOrdinalMap.html",
    "title": "Interface DirectoryTaxonomyWriter.IOrdinalMap | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface DirectoryTaxonomyWriter.IOrdinalMap Mapping from old ordinal to new ordinals, used when merging indexes wit separate taxonomies. AddMapping(Int32, Int32) merges one or more taxonomies into the given taxonomy (this). An DirectoryTaxonomyWriter.IOrdinalMap is filled for each of the added taxonomies, containing the new ordinal (in the merged taxonomy) of each of the categories in the old taxonomy. There exist two implementations of DirectoryTaxonomyWriter.IOrdinalMap : DirectoryTaxonomyWriter.MemoryOrdinalMap and DirectoryTaxonomyWriter.DiskOrdinalMap . As their names suggest, the former keeps the map in memory and the latter in a temporary disk file. Because these maps will later be needed one by one (to remap the counting lists), not all at the same time, it is recommended to put the first taxonomy's map in memory, and all the rest on disk (later to be automatically read into memory one by one, when needed). Namespace : Lucene.Net.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public interface IOrdinalMap Methods | Improve this Doc View Source AddDone() Call AddDone() to say that all AddMapping(Int32, Int32) have been done. In some implementations this might free some resources. Declaration void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Record a mapping. Declaration void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Return the map from the taxonomy's original (consecutive) ordinals to the new taxonomy's ordinals. If the map has to be read from disk and ordered appropriately, it is done when getMap() is called. getMap() should only be called once, and only when the map is actually needed. Calling it will also free all resources that the map might be holding (such as temporary disk space), other than the returned int[]. Declaration int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Set the size of the map. This MUST be called before AddMapping(Int32, Int32) . It is assumed (but not verified) that AddMapping(Int32, Int32) will then be called exactly 'size' times, with different origOrdinals between 0 and size - 1. Declaration void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize"
  },
  "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter.MemoryOrdinalMap.html",
    "title": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DirectoryTaxonomyWriter.MemoryOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained in memory Inheritance System.Object DirectoryTaxonomyWriter.MemoryOrdinalMap Implements DirectoryTaxonomyWriter.IOrdinalMap 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.Facet.Taxonomy.Directory Assembly : Lucene.Net.Facet.dll Syntax public sealed class MemoryOrdinalMap : DirectoryTaxonomyWriter.IOrdinalMap Constructors | Improve this Doc View Source MemoryOrdinalMap() Sole constructor. Declaration public MemoryOrdinalMap() Methods | Improve this Doc View Source AddDone() Declaration public void AddDone() | Improve this Doc View Source AddMapping(Int32, Int32) Declaration public void AddMapping(int origOrdinal, int newOrdinal) Parameters Type Name Description System.Int32 origOrdinal System.Int32 newOrdinal | Improve this Doc View Source GetMap() Declaration public int[] GetMap() Returns Type Description System.Int32 [] | Improve this Doc View Source SetSize(Int32) Declaration public void SetSize(int taxonomySize) Parameters Type Name Description System.Int32 taxonomySize Implements DirectoryTaxonomyWriter.IOrdinalMap"
  },
  "Lucene.Net.Facet.Taxonomy.Directory.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Directory.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.Directory | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy.Directory <!-- 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. --> Taxonomy index implementation using on top of a Directory. Classes DirectoryTaxonomyReader A TaxonomyReader which retrieves stored taxonomy information from a Lucene.Net.Store.Directory . Reading from the on-disk index on every method call is too slow, so this implementation employs caching: Some methods cache recent requests and their results, while other methods prefetch all the data into memory and then provide answers directly from in-memory tables. See the documentation of individual methods for comments on their performance. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DirectoryTaxonomyWriter ITaxonomyWriter which uses a Lucene.Net.Store.Directory to store the taxonomy information on disk, and keeps an additional in-memory cache of some or all categories. In addition to the permanently-stored information in the Lucene.Net.Store.Directory , efficiency dictates that we also keep an in-memory cache of recently seen or all categories, so that we do not need to go back to disk for every category addition to see which ordinal this category already has, if any. A ITaxonomyWriterCache object determines the specific caching algorithm used. This class offers some hooks for extending classes to control the Lucene.Net.Index.IndexWriter instance that is used. See OpenIndexWriter(Directory, IndexWriterConfig) . This is a Lucene.NET EXPERIMENTAL API, use at your own risk DirectoryTaxonomyWriter.DiskOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained on file system DirectoryTaxonomyWriter.MemoryOrdinalMap DirectoryTaxonomyWriter.IOrdinalMap maintained in memory Interfaces DirectoryTaxonomyWriter.IOrdinalMap Mapping from old ordinal to new ordinals, used when merging indexes wit separate taxonomies. AddMapping(Int32, Int32) merges one or more taxonomies into the given taxonomy (this). An DirectoryTaxonomyWriter.IOrdinalMap is filled for each of the added taxonomies, containing the new ordinal (in the merged taxonomy) of each of the categories in the old taxonomy. There exist two implementations of DirectoryTaxonomyWriter.IOrdinalMap : DirectoryTaxonomyWriter.MemoryOrdinalMap and DirectoryTaxonomyWriter.DiskOrdinalMap . As their names suggest, the former keeps the map in memory and the latter in a temporary disk file. Because these maps will later be needed one by one (to remap the counting lists), not all at the same time, it is recommended to put the first taxonomy's map in memory, and all the rest on disk (later to be automatically read into memory one by one, when needed)."
  },
  "Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html": {
    "href": "Lucene.Net.Facet.Taxonomy.DocValuesOrdinalsReader.html",
    "title": "Class DocValuesOrdinalsReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DocValuesOrdinalsReader Decodes ordinals previously indexed into a BinaryDocValues field Inheritance System.Object OrdinalsReader DocValuesOrdinalsReader 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class DocValuesOrdinalsReader : OrdinalsReader Constructors | Improve this Doc View Source DocValuesOrdinalsReader() Default constructor. Declaration public DocValuesOrdinalsReader() | Improve this Doc View Source DocValuesOrdinalsReader(String) Create this, with the specified indexed field name. Declaration public DocValuesOrdinalsReader(string field) Parameters Type Name Description System.String field Properties | Improve this Doc View Source IndexFieldName Declaration public override string IndexFieldName { get; } Property Value Type Description System.String Overrides OrdinalsReader.IndexFieldName Methods | Improve this Doc View Source Decode(BytesRef, Int32sRef) Subclass & override if you change the encoding. Declaration protected virtual void Decode(BytesRef buf, Int32sRef ordinals) Parameters Type Name Description Lucene.Net.Util.BytesRef buf Lucene.Net.Util.Int32sRef ordinals | Improve this Doc View Source GetReader(AtomicReaderContext) Declaration public override OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader Overrides OrdinalsReader.GetReader(AtomicReaderContext)"
  },
  "Lucene.Net.Facet.Taxonomy.FacetLabel.html": {
    "href": "Lucene.Net.Facet.Taxonomy.FacetLabel.html",
    "title": "Class FacetLabel | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FacetLabel Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET INTERNAL API, use at your own risk Inheritance System.Object FacetLabel Implements System.IComparable < FacetLabel > 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class FacetLabel : IComparable<FacetLabel> Constructors | Improve this Doc View Source FacetLabel(String, String[]) Construct from the dimension plus the given path components. Declaration public FacetLabel(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path | Improve this Doc View Source FacetLabel(String[]) Construct from the given path components. Declaration public FacetLabel(params string[] components) Parameters Type Name Description System.String [] components Fields | Improve this Doc View Source MAX_CATEGORY_PATH_LENGTH The maximum number of characters a FacetLabel can have. Declaration public static readonly int MAX_CATEGORY_PATH_LENGTH Field Value Type Description System.Int32 Properties | Improve this Doc View Source Components The components of this FacetLabel . Note that this array may be shared with other FacetLabel instances, e.g. as a result of Subpath(Int32) , therefore you should traverse the array up to Length for this path's components. Declaration public string[] Components { get; } Property Value Type Description System.String [] | Improve this Doc View Source Length The number of components of this FacetLabel . Declaration public int Length { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source CompareTo(FacetLabel) Compares this path with another FacetLabel for lexicographic order. Declaration public virtual int CompareTo(FacetLabel other) Parameters Type Name Description FacetLabel other Returns Type Description System.Int32 | Improve this Doc View Source Equals(Object) Declaration public override bool Equals(object obj) Parameters Type Name Description System.Object obj 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 Int64HashCode() Calculate a 64-bit hash function for this path. This is necessary for NameHashInt32CacheLru (the default cache impl for LruTaxonomyWriterCache ) to reduce the chance of \"silent but deadly\" collisions. NOTE: This was longHashCode() in Lucene Declaration public virtual long Int64HashCode() Returns Type Description System.Int64 | Improve this Doc View Source Subpath(Int32) Returns a sub-path of this path up to length components. Declaration public virtual FacetLabel Subpath(int length) Parameters Type Name Description System.Int32 length Returns Type Description FacetLabel | Improve this Doc View Source ToString() Returns a string representation of the path. Declaration public override string ToString() Returns Type Description System.String Overrides System.Object.ToString() Operators | Improve this Doc View Source Equality(FacetLabel, FacetLabel) Declaration public static bool operator ==(FacetLabel left, FacetLabel right) Parameters Type Name Description FacetLabel left FacetLabel right Returns Type Description System.Boolean | Improve this Doc View Source GreaterThan(FacetLabel, FacetLabel) Declaration public static bool operator>(FacetLabel left, FacetLabel right) Parameters Type Name Description FacetLabel left FacetLabel right Returns Type Description System.Boolean | Improve this Doc View Source GreaterThanOrEqual(FacetLabel, FacetLabel) Declaration public static bool operator >=(FacetLabel left, FacetLabel right) Parameters Type Name Description FacetLabel left FacetLabel right Returns Type Description System.Boolean | Improve this Doc View Source Inequality(FacetLabel, FacetLabel) Declaration public static bool operator !=(FacetLabel left, FacetLabel right) Parameters Type Name Description FacetLabel left FacetLabel right Returns Type Description System.Boolean | Improve this Doc View Source LessThan(FacetLabel, FacetLabel) Declaration public static bool operator <(FacetLabel left, FacetLabel right) Parameters Type Name Description FacetLabel left FacetLabel right Returns Type Description System.Boolean | Improve this Doc View Source LessThanOrEqual(FacetLabel, FacetLabel) Declaration public static bool operator <=(FacetLabel left, FacetLabel right) Parameters Type Name Description FacetLabel left FacetLabel right Returns Type Description System.Boolean Implements System.IComparable<T>"
  },
  "Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html": {
    "href": "Lucene.Net.Facet.Taxonomy.FastTaxonomyFacetCounts.html",
    "title": "Class FastTaxonomyFacetCounts | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class FastTaxonomyFacetCounts Computes facets counts, assuming the default encoding into DocValues was used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets FastTaxonomyFacetCounts Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class FastTaxonomyFacetCounts : Int32TaxonomyFacets Constructors | Improve this Doc View Source FastTaxonomyFacetCounts(TaxonomyReader, FacetsConfig, FacetsCollector) Create FastTaxonomyFacetCounts , which also counts all facet labels. Declaration public FastTaxonomyFacetCounts(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source FastTaxonomyFacetCounts(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create FastTaxonomyFacetCounts , using the specified indexFieldName for ordinals. Use this if you had set SetIndexFieldName(String, String) to change the index field name for certain dimensions. Declaration public FastTaxonomyFacetCounts(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "Lucene.Net.Facet.Taxonomy.html": {
    "href": "Lucene.Net.Facet.Taxonomy.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy <!-- 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. --> Taxonomy of Categories Facets are defined using a hierarchy of categories, known as a _Taxonomy_. For example, the taxonomy of a book store application might have the following structure: Author Mark Twain J. K. Rowling Date 2010 March April 2009 The Taxonomy translates category-paths into interger identifiers (often termed ordinals ) and vice versa. The category Author/Mark Twain adds two nodes to the taxonomy: Author and Author/Mark Twain , each is assigned a different ordinal. The taxonomy maintains the invariant that a node always has an ordinal that is < all its children. Classes AssociationFacetField Add an instance of this to your Lucene.Net.Documents.Document to add a facet label associated with an arbitrary byte[] . This will require a custom Facets implementation at search time; see Int32AssociationFacetField and SingleAssociationFacetField to use existing Facets implementations. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CachedOrdinalsReader A per-segment cache of documents' facet ordinals. Every CachedOrdinalsReader.CachedOrds holds the ordinals in a raw int[] , and therefore consumes as much RAM as the total number of ordinals found in the segment, but saves the CPU cost of decoding ordinals during facet counting. NOTE: every CachedOrdinalsReader.CachedOrds is limited to 2.1B total ordinals. If that is a limitation for you then consider limiting the segment size to fewer documents, or use an alternative cache which pages through the category ordinals. NOTE: when using this cache, it is advised to use a DocValuesFormat that does not cache the data in memory, at least for the category lists fields, or otherwise you'll be doing double-caching. NOTE: create one instance of this and re-use it for all facet implementations (the cache is per-instance, not static). CachedOrdinalsReader.CachedOrds Holds the cached ordinals in two parallel int[] arrays. CategoryPath Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET EXPERIMENTAL API, use at your own risk DocValuesOrdinalsReader Decodes ordinals previously indexed into a BinaryDocValues field FacetLabel Holds a sequence of string components, specifying the hierarchical name of a category. This is a Lucene.NET INTERNAL API, use at your own risk FastTaxonomyFacetCounts Computes facets counts, assuming the default encoding into DocValues was used. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32AssociationFacetField Add an instance of this to your Lucene.Net.Documents.Document to add a facet label associated with an System.Int32 . Use TaxonomyFacetSumInt32Associations to aggregate int values per facet label at search time. NOTE: This was IntAssociationFacetField in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Int32TaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords int[] . NOTE: This was IntTaxonomyFacets in Lucene LruDictionary<TKey, TValue> LruDictionary<TKey, TValue> is similar to of Java's HashMap, which has a bounded Limit ; When it reaches that Limit , each time a new element is added, the least recently used (LRU) entry is removed. Unlike the Java Lucene implementation, this one is thread safe because it is backed by the J2N.Collections.Concurrent.LurchTable`2 . Do note that every time an element is read from LruDictionary<TKey, TValue> , a write operation also takes place to update the element's last access time. This is because the LRU order needs to be remembered to determine which element to evict when the Limit is exceeded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk OrdinalsReader Provides per-document ordinals. OrdinalsReader.OrdinalsSegmentReader Returns ordinals for documents in one segment. ParallelTaxonomyArrays Returns 3 arrays for traversing the taxonomy: Parents : Parents[i] denotes the parent of category ordinal i . Children : Children[i] denotes a child of category ordinal i . Siblings : Siblings[i] denotes the sibling of category ordinal i . To traverse the taxonomy tree, you typically start with Children[0] (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call Children[Children[0]] or Siblings[Children[0]] and so forth, respectively. NOTE: you are not expected to modify the values of the arrays, since the arrays are shared with other threads. @lucene.experimental PrintTaxonomyStats Prints how many ords are under each dimension. SearcherTaxonomyManager Manages near-real-time reopen of both an Lucene.Net.Search.IndexSearcher and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Directory) then you must open a new SearcherTaxonomyManager afterwards. SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of Lucene.Net.Search.IndexSearcher and TaxonomyReader SingleAssociationFacetField Add an instance of this to your Lucene.Net.Documents.Document to add a facet label associated with a System.Single . Use TaxonomyFacetSumSingleAssociations to aggregate System.Single values per facet label at search time. NOTE: This was FloatAssociationFacetField in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk SingleTaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords float[] . NOTE: This was FloatTaxonomyFacets in Lucene TaxonomyFacetCounts Reads from any OrdinalsReader ; use FastTaxonomyFacetCounts if you are using the default encoding from BinaryDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyFacets Base class for all taxonomy-based facets impls. TaxonomyFacetSumInt32Associations Aggregates sum of System.Int32 values previously indexed with Int32AssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumIntAssociations in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyFacetSumSingleAssociations Aggregates sum of System.Single values previously indexed with SingleAssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumFloatAssociations in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyFacetSumValueSource Aggregates sum of values from Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32) and Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32,System.Double[]) , for each facet label. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyFacetSumValueSource.ScoreValueSource Lucene.Net.Queries.Function.ValueSource that returns the score for each hit; use this to aggregate the sum of all hit scores for each facet label. TaxonomyReader TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time. A TaxonomyReader holds a list of categories. Each category has a serial number which we call an \"ordinal\", and a hierarchical \"path\" name: The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted. The path is a CategoryPath object specifying the category's position in the hierarchy. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called \"point in time\" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index. This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a \"too new\" taxonomy not being consistent with an older index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk TaxonomyReader.ChildrenEnumerator An iterator over a category's children. Interfaces ITaxonomyWriter ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers and a single writer to be active concurrently. Readers follow so-called \"point in time\" semantics, i.e., a reader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. Faceted search keeps two indices - namely Lucene's main index, and this taxonomy index. When one or more readers are active concurrently with the writer, care must be taken to avoid an inconsistency between the state of these two indices: When writing to the indices, the taxonomy must always be committed to disk before the main index, because the main index refers to categories listed in the taxonomy. Such control can best be achieved by turning off the main index's \"autocommit\" feature, and explicitly calling Commit() for both indices (first for the taxonomy, then for the main index). In old versions of Lucene (2.2 or earlier), when autocommit could not be turned off, a more complicated solution needs to be used. E.g., use some sort of (possibly inter-process) locking to ensure that a reader is being opened only right after both indices have been flushed (and before anything else is written to them). This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField.html",
    "title": "Class Int32AssociationFacetField | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int32AssociationFacetField Add an instance of this to your Lucene.Net.Documents.Document to add a facet label associated with an System.Int32 . Use TaxonomyFacetSumInt32Associations to aggregate int values per facet label at search time. NOTE: This was IntAssociationFacetField in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Documents.Field AssociationFacetField Int32AssociationFacetField Implements Lucene.Net.Index.IIndexableField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Lucene.Net.Documents.Field.m_type Lucene.Net.Documents.Field.m_name Lucene.Net.Documents.Field.FieldsData Lucene.Net.Documents.Field.m_tokenStream Lucene.Net.Documents.Field.m_boost Lucene.Net.Documents.Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Lucene.Net.Documents.Field.GetReaderValue() Lucene.Net.Documents.Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Lucene.Net.Documents.Field.SetBytesValue(Lucene.Net.Util.BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Lucene.Net.Documents.Field.SetTokenStream(Lucene.Net.Analysis.TokenStream) Lucene.Net.Documents.Field.Name Lucene.Net.Documents.Field.Boost Lucene.Net.Documents.Field.GetNumericValue() Lucene.Net.Documents.Field.NumericType Lucene.Net.Documents.Field.GetByteValue() Lucene.Net.Documents.Field.GetInt16Value() Lucene.Net.Documents.Field.GetInt32Value() Lucene.Net.Documents.Field.GetInt64Value() Lucene.Net.Documents.Field.GetSingleValue() Lucene.Net.Documents.Field.GetDoubleValue() Lucene.Net.Documents.Field.GetBinaryValue() Lucene.Net.Documents.Field.FieldType Lucene.Net.Documents.Field.IndexableFieldType Lucene.Net.Documents.Field.GetTokenStream(Lucene.Net.Analysis.Analyzer) Lucene.Net.Documents.Field.TranslateFieldType(Lucene.Net.Documents.Field.Store, Lucene.Net.Documents.Field.Index, Lucene.Net.Documents.Field.TermVector) 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) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class Int32AssociationFacetField : AssociationFacetField, IIndexableField Constructors | Improve this Doc View Source Int32AssociationFacetField(Int32, String, String[]) Creates this from dim and path and an int association Declaration public Int32AssociationFacetField(int assoc, string dim, params string[] path) Parameters Type Name Description System.Int32 assoc System.String dim System.String [] path Methods | Improve this Doc View Source BytesRefToInt32(BytesRef) Decodes a previously encoded System.Int32 . NOTE: This was bytesRefToInt() in Lucene Declaration public static int BytesRefToInt32(BytesRef b) Parameters Type Name Description Lucene.Net.Util.BytesRef b Returns Type Description System.Int32 | Improve this Doc View Source Int32ToBytesRef(Int32) Encodes an System.Int32 as a 4-byte Lucene.Net.Util.BytesRef , big-endian. NOTE: This was intToBytesRef() in Lucene Declaration public static BytesRef Int32ToBytesRef(int v) Parameters Type Name Description System.Int32 v Returns Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString() Implements Lucene.Net.Index.IIndexableField"
  },
  "Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html": {
    "href": "Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.html",
    "title": "Class Int32TaxonomyFacets | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Int32TaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords int[] . NOTE: This was IntTaxonomyFacets in Lucene Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets FastTaxonomyFacetCounts TaxonomyFacetCounts TaxonomyFacetSumInt32Associations Inherited Members TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class Int32TaxonomyFacets : TaxonomyFacets Constructors | Improve this Doc View Source Int32TaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected Int32TaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_values Per-ordinal value. Declaration protected readonly int[] m_values Field Value Type Description System.Int32 [] Methods | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[]) | Improve this Doc View Source Rollup() Rolls up any single-valued hierarchical dimensions. Declaration protected virtual void Rollup()"
  },
  "Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html": {
    "href": "Lucene.Net.Facet.Taxonomy.ITaxonomyWriter.html",
    "title": "Interface ITaxonomyWriter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface ITaxonomyWriter ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers and a single writer to be active concurrently. Readers follow so-called \"point in time\" semantics, i.e., a reader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. Faceted search keeps two indices - namely Lucene's main index, and this taxonomy index. When one or more readers are active concurrently with the writer, care must be taken to avoid an inconsistency between the state of these two indices: When writing to the indices, the taxonomy must always be committed to disk before the main index, because the main index refers to categories listed in the taxonomy. Such control can best be achieved by turning off the main index's \"autocommit\" feature, and explicitly calling Commit() for both indices (first for the taxonomy, then for the main index). In old versions of Lucene (2.2 or earlier), when autocommit could not be turned off, a more complicated solution needs to be used. E.g., use some sort of (possibly inter-process) locking to ensure that a reader is being opened only right after both indices have been flushed (and before anything else is written to them). This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inherited Members System.IDisposable.Dispose() Lucene.Net.Index.ITwoPhaseCommit.PrepareCommit() Lucene.Net.Index.ITwoPhaseCommit.Commit() Lucene.Net.Index.ITwoPhaseCommit.Rollback() Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public interface ITaxonomyWriter : IDisposable, ITwoPhaseCommit Properties | Improve this Doc View Source CommitData Returns the commit user data map that was set on SetCommitData(IDictionary<String, String>) . Declaration IDictionary<string, string> CommitData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > | Improve this Doc View Source Count Count returns the number of categories in the taxonomy. Because categories are numbered consecutively starting with 0, it means the taxonomy contains ordinals 0 through Count -1. Note that the number returned by Count is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). Declaration int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddCategory(FacetLabel) AddCategory(FacetLabel) adds a category with a given path name to the taxonomy, and returns its ordinal. If the category was already present in the taxonomy, its existing ordinal is returned. Before adding a category, AddCategory(FacetLabel) makes sure that all its ancestor categories exist in the taxonomy as well. As result, the ordinal of a category is guaranteed to be smaller then the ordinal of any of its descendants. Declaration int AddCategory(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetParent(Int32) GetParent(Int32) returns the ordinal of the parent category of the category with the given ordinal. When a category is specified as a path name, finding the path of its parent is as trivial as dropping the last component of the path. GetParent(Int32) is functionally equivalent to calling GetPath(Int32) on the given ordinal, dropping the last component of the path, and then calling GetOrdinal(FacetLabel) to get an ordinal back. If the given ordinal is the ROOT_ORDINAL , an INVALID_ORDINAL is returned. If the given ordinal is a top-level category, the ROOT_ORDINAL is returned. If an invalid ordinal is given (negative or beyond the last available ordinal), an System.IndexOutOfRangeException is thrown. However, it is expected that GetParent(Int32) will only be called for ordinals which are already known to be in the taxonomy. TODO (Facet): instead of a GetParent(Int32) method, consider having a GetCategory(categorypath, prefixlen) which is similar to AddCategory(FacetLabel) except it doesn't add new categories; This method can be used to get the ordinals of all prefixes of the given category, and it can use exactly the same code and cache used by AddCategory(FacetLabel) so it means less code. Declaration int GetParent(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description System.Int32 | Improve this Doc View Source SetCommitData(IDictionary<String, String>) Sets the commit user data map. That method is considered a transaction and will be committed ( Commit() ) even if no other changes were made to the writer instance. NOTE: the map is cloned internally, therefore altering the map's contents after calling this method has no effect. Declaration void SetCommitData(IDictionary<string, string> commitUserData) Parameters Type Name Description System.Collections.Generic.IDictionary < System.String , System.String > commitUserData"
  },
  "Lucene.Net.Facet.Taxonomy.LruDictionary-2.html": {
    "href": "Lucene.Net.Facet.Taxonomy.LruDictionary-2.html",
    "title": "Class LruDictionary<TKey, TValue> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class LruDictionary<TKey, TValue> LruDictionary<TKey, TValue> is similar to of Java's HashMap, which has a bounded Limit ; When it reaches that Limit , each time a new element is added, the least recently used (LRU) entry is removed. Unlike the Java Lucene implementation, this one is thread safe because it is backed by the J2N.Collections.Concurrent.LurchTable`2 . Do note that every time an element is read from LruDictionary<TKey, TValue> , a write operation also takes place to update the element's last access time. This is because the LRU order needs to be remembered to determine which element to evict when the Limit is exceeded. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LruDictionary<TKey, TValue> Implements System.Collections.Generic.IDictionary <TKey, TValue> System.Collections.Generic.ICollection < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.Generic.IEnumerable < System.Collections.Generic.KeyValuePair <TKey, TValue>> System.Collections.IEnumerable 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class LruDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable Type Parameters Name Description TKey TValue Constructors | Improve this Doc View Source LruDictionary(Int32) Create a new hash map with a bounded size and with least recently used entries removed. Declaration public LruDictionary(int limit) Parameters Type Name Description System.Int32 limit The maximum size (in number of entries) to which the map can grow before the least recently used entries start being removed. Setting limit to a very large value, like System.Int32.MaxValue is allowed, but is less efficient than using J2N.Collections.Generic.Dictionary`2 or System.Collections.Generic.Dictionary`2 because our class needs to keep track of the use order (via an additional doubly-linked list) which is not used when the map's size is always below the maximum size. | Improve this Doc View Source LruDictionary(Int32, IEqualityComparer<TKey>) Create a new hash map with a bounded size and with least recently used entries removed. LUCENENET specific overload to allow passing in custom System.Collections.Generic.IEqualityComparer<T> . See LUCENENET-602. Declaration public LruDictionary(int limit, IEqualityComparer<TKey> comparer) Parameters Type Name Description System.Int32 limit The maximum size (in number of entries) to which the map can grow before the least recently used entries start being removed. Setting limit to a very large value, like System.Int32.MaxValue is allowed, but is less efficient than using J2N.Collections.Generic.Dictionary`2 or System.Collections.Generic.Dictionary`2 because our class needs to keep track of the use order (via an additional doubly-linked list) which is not used when the map's size is always below the maximum size. System.Collections.Generic.IEqualityComparer <TKey> comparer The System.Collections.Generic.IEqualityComparer<T> implementation to use when comparing keys, or null to use the default System.Collections.Generic.IEqualityComparer<T> for the type of the key. Properties | Improve this Doc View Source Count Declaration public virtual int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source IsReadOnly Declaration public virtual bool IsReadOnly { get; } Property Value Type Description System.Boolean | Improve this Doc View Source Item[TKey] Declaration public virtual TValue this[TKey key] { get; set; } Parameters Type Name Description TKey key Property Value Type Description TValue | Improve this Doc View Source Keys Declaration public virtual ICollection<TKey> Keys { get; } Property Value Type Description System.Collections.Generic.ICollection <TKey> | Improve this Doc View Source Limit Allows changing the dictionary's maximal number of elements which was defined at construction time. Note that if the dictionary is already larger than Limit , the current implementation does not shrink it (by removing the oldest elements); Rather, the map remains in its current size as new elements are added, and will only start shrinking (until settling again on the given Limit ) if existing elements are explicitly deleted. Declaration public virtual int Limit { get; set; } Property Value Type Description System.Int32 | Improve this Doc View Source Values Declaration public virtual ICollection<TValue> Values { get; } Property Value Type Description System.Collections.Generic.ICollection <TValue> Methods | Improve this Doc View Source Add(TKey, TValue) Declaration public virtual void Add(TKey key, TValue value) Parameters Type Name Description TKey key TValue value | Improve this Doc View Source Add(KeyValuePair<TKey, TValue>) Declaration public virtual void Add(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Contains(KeyValuePair<TKey, TValue>) Declaration public virtual bool Contains(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source ContainsKey(TKey) Declaration public virtual bool ContainsKey(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source CopyTo(KeyValuePair<TKey, TValue>[], Int32) Declaration public virtual void CopyTo(KeyValuePair<TKey, TValue>[] array, int index) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue>[] array System.Int32 index | Improve this Doc View Source Get(TKey) Declaration public virtual TValue Get(TKey key) Parameters Type Name Description TKey key Returns Type Description TValue | Improve this Doc View Source GetEnumerator() Declaration public virtual IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() Returns Type Description System.Collections.Generic.IEnumerator < System.Collections.Generic.KeyValuePair <TKey, TValue>> | Improve this Doc View Source Put(TKey, TValue) Declaration public virtual TValue Put(TKey key, TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description TValue | Improve this Doc View Source Remove(TKey) Declaration public virtual bool Remove(TKey key) Parameters Type Name Description TKey key Returns Type Description System.Boolean | Improve this Doc View Source Remove(KeyValuePair<TKey, TValue>) Declaration public virtual bool Remove(KeyValuePair<TKey, TValue> item) Parameters Type Name Description System.Collections.Generic.KeyValuePair <TKey, TValue> item Returns Type Description System.Boolean | Improve this Doc View Source TryGetValue(TKey, out TValue) Declaration public virtual bool TryGetValue(TKey key, out TValue value) Parameters Type Name Description TKey key TValue value Returns Type Description System.Boolean Explicit Interface Implementations | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description System.Collections.IEnumerator Implements System.Collections.Generic.IDictionary<TKey, TValue> System.Collections.Generic.ICollection<T> System.Collections.Generic.IEnumerable<T> System.Collections.IEnumerable"
  },
  "Lucene.Net.Facet.Taxonomy.OrdinalsReader.html": {
    "href": "Lucene.Net.Facet.Taxonomy.OrdinalsReader.html",
    "title": "Class OrdinalsReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class OrdinalsReader Provides per-document ordinals. Inheritance System.Object OrdinalsReader CachedOrdinalsReader DocValuesOrdinalsReader 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class OrdinalsReader Constructors | Improve this Doc View Source OrdinalsReader() Default constructor. Declaration protected OrdinalsReader() Properties | Improve this Doc View Source IndexFieldName Returns the indexed field name this OrdinalsReader is reading from. Declaration public abstract string IndexFieldName { get; } Property Value Type Description System.String Methods | Improve this Doc View Source GetReader(AtomicReaderContext) Set current atomic reader. Declaration public abstract OrdinalsReader.OrdinalsSegmentReader GetReader(AtomicReaderContext context) Parameters Type Name Description Lucene.Net.Index.AtomicReaderContext context Returns Type Description OrdinalsReader.OrdinalsSegmentReader"
  },
  "Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html": {
    "href": "Lucene.Net.Facet.Taxonomy.OrdinalsReader.OrdinalsSegmentReader.html",
    "title": "Class OrdinalsReader.OrdinalsSegmentReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class OrdinalsReader.OrdinalsSegmentReader Returns ordinals for documents in one segment. Inheritance System.Object OrdinalsReader.OrdinalsSegmentReader 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class OrdinalsSegmentReader Constructors | Improve this Doc View Source OrdinalsSegmentReader() Default constructor. Declaration protected OrdinalsSegmentReader() Methods | Improve this Doc View Source Get(Int32, Int32sRef) Get the ordinals for this document. The ordinals . Offset must always be 0! Declaration public abstract void Get(int doc, Int32sRef ordinals) Parameters Type Name Description System.Int32 doc Lucene.Net.Util.Int32sRef ordinals"
  },
  "Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html": {
    "href": "Lucene.Net.Facet.Taxonomy.ParallelTaxonomyArrays.html",
    "title": "Class ParallelTaxonomyArrays | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class ParallelTaxonomyArrays Returns 3 arrays for traversing the taxonomy: Parents : Parents[i] denotes the parent of category ordinal i . Children : Children[i] denotes a child of category ordinal i . Siblings : Siblings[i] denotes the sibling of category ordinal i . To traverse the taxonomy tree, you typically start with Children[0] (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call Children[Children[0]] or Siblings[Children[0]] and so forth, respectively. NOTE: you are not expected to modify the values of the arrays, since the arrays are shared with other threads. @lucene.experimental Inheritance System.Object ParallelTaxonomyArrays 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class ParallelTaxonomyArrays Constructors | Improve this Doc View Source ParallelTaxonomyArrays() Sole constructor. Declaration protected ParallelTaxonomyArrays() Properties | Improve this Doc View Source Children Returns the children array, where Children[i] denotes a child of category ordinal i . Declaration public abstract int[] Children { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Parents Returns the parents array, where Parents[i] denotes the parent of category ordinal i . Declaration public abstract int[] Parents { get; } Property Value Type Description System.Int32 [] | Improve this Doc View Source Siblings Returns the siblings array, where Siblings[i] denotes the sibling of category ordinal i . Declaration public abstract int[] Siblings { get; } Property Value Type Description System.Int32 []"
  },
  "Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html": {
    "href": "Lucene.Net.Facet.Taxonomy.PrintTaxonomyStats.html",
    "title": "Class PrintTaxonomyStats | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class PrintTaxonomyStats Prints how many ords are under each dimension. Inheritance System.Object PrintTaxonomyStats 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public static class PrintTaxonomyStats Methods | Improve this Doc View Source Main(String[]) Command-line tool. Declaration public static int Main(string[] args) Parameters Type Name Description System.String [] args Returns Type Description System.Int32 | Improve this Doc View Source PrintStats(TaxonomyReader, TextWriter, Boolean) Recursively prints stats for all ordinals. Declaration public static void PrintStats(TaxonomyReader r, TextWriter out, bool printTree) Parameters Type Name Description TaxonomyReader r System.IO.TextWriter out System.Boolean printTree"
  },
  "Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html": {
    "href": "Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.html",
    "title": "Class SearcherTaxonomyManager | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SearcherTaxonomyManager Manages near-real-time reopen of both an Lucene.Net.Search.IndexSearcher and a TaxonomyReader . NOTE : If you call ReplaceTaxonomy(Directory) then you must open a new SearcherTaxonomyManager afterwards. Inheritance System.Object Lucene.Net.Search.ReferenceManager < SearcherTaxonomyManager.SearcherAndTaxonomy > SearcherTaxonomyManager Implements System.IDisposable Inherited Members Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.Current Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.Acquire() Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.Dispose() ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>.Dispose(Boolean) Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.MaybeRefresh() Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.MaybeRefreshBlocking() Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.AfterMaybeRefresh() Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.Release(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.AddListener(Lucene.Net.Search.ReferenceManager.IRefreshListener) Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.RemoveListener(Lucene.Net.Search.ReferenceManager.IRefreshListener) 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SearcherTaxonomyManager : ReferenceManager<SearcherTaxonomyManager.SearcherAndTaxonomy>, IDisposable Constructors | Improve this Doc View Source SearcherTaxonomyManager(IndexWriter, Boolean, SearcherFactory, DirectoryTaxonomyWriter) Creates near-real-time searcher and taxonomy reader from the corresponding writers. Declaration public SearcherTaxonomyManager(IndexWriter writer, bool applyAllDeletes, SearcherFactory searcherFactory, DirectoryTaxonomyWriter taxoWriter) Parameters Type Name Description Lucene.Net.Index.IndexWriter writer System.Boolean applyAllDeletes Lucene.Net.Search.SearcherFactory searcherFactory DirectoryTaxonomyWriter taxoWriter | Improve this Doc View Source SearcherTaxonomyManager(Directory, Directory, SearcherFactory) Creates search and taxonomy readers over the corresponding directories. NOTE: you should only use this constructor if you commit and call Lucene.Net.Search.ReferenceManager<G>.MaybeRefresh() (on the ReaderManager ) in the same thread. Otherwise it could lead to an unsync'd Lucene.Net.Search.IndexSearcher and TaxonomyReader pair. Declaration public SearcherTaxonomyManager(Directory indexDir, Directory taxoDir, SearcherFactory searcherFactory) Parameters Type Name Description Lucene.Net.Store.Directory indexDir Lucene.Net.Store.Directory taxoDir Lucene.Net.Search.SearcherFactory searcherFactory Methods | Improve this Doc View Source DecRef(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override void DecRef(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.DecRef(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) | Improve this Doc View Source GetRefCount(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override int GetRefCount(SearcherTaxonomyManager.SearcherAndTaxonomy reference) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy reference Returns Type Description System.Int32 Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.GetRefCount(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) | Improve this Doc View Source RefreshIfNeeded(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override SearcherTaxonomyManager.SearcherAndTaxonomy RefreshIfNeeded(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Returns Type Description SearcherTaxonomyManager.SearcherAndTaxonomy Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.RefreshIfNeeded(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) | Improve this Doc View Source TryIncRef(SearcherTaxonomyManager.SearcherAndTaxonomy) Declaration protected override bool TryIncRef(SearcherTaxonomyManager.SearcherAndTaxonomy ref) Parameters Type Name Description SearcherTaxonomyManager.SearcherAndTaxonomy ref Returns Type Description System.Boolean Overrides Lucene.Net.Search.ReferenceManager<Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy>.TryIncRef(Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy) Implements System.IDisposable"
  },
  "Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html": {
    "href": "Lucene.Net.Facet.Taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy.html",
    "title": "Class SearcherTaxonomyManager.SearcherAndTaxonomy | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SearcherTaxonomyManager.SearcherAndTaxonomy Holds a matched pair of Lucene.Net.Search.IndexSearcher and TaxonomyReader Inheritance System.Object SearcherTaxonomyManager.SearcherAndTaxonomy 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SearcherAndTaxonomy Constructors | Improve this Doc View Source SearcherAndTaxonomy(IndexSearcher, DirectoryTaxonomyReader) Create a SearcherTaxonomyManager.SearcherAndTaxonomy Declaration public SearcherAndTaxonomy(IndexSearcher searcher, DirectoryTaxonomyReader taxonomyReader) Parameters Type Name Description Lucene.Net.Search.IndexSearcher searcher DirectoryTaxonomyReader taxonomyReader Properties | Improve this Doc View Source Searcher Point-in-time Lucene.Net.Search.IndexSearcher . Declaration public IndexSearcher Searcher { get; } Property Value Type Description Lucene.Net.Search.IndexSearcher | Improve this Doc View Source TaxonomyReader Matching point-in-time DirectoryTaxonomyReader . Declaration public DirectoryTaxonomyReader TaxonomyReader { get; } Property Value Type Description DirectoryTaxonomyReader"
  },
  "Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html": {
    "href": "Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField.html",
    "title": "Class SingleAssociationFacetField | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SingleAssociationFacetField Add an instance of this to your Lucene.Net.Documents.Document to add a facet label associated with a System.Single . Use TaxonomyFacetSumSingleAssociations to aggregate System.Single values per facet label at search time. NOTE: This was FloatAssociationFacetField in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Lucene.Net.Documents.Field AssociationFacetField SingleAssociationFacetField Implements Lucene.Net.Index.IIndexableField Inherited Members AssociationFacetField.TYPE AssociationFacetField.Dim AssociationFacetField.Path AssociationFacetField.Assoc Lucene.Net.Documents.Field.m_type Lucene.Net.Documents.Field.m_name Lucene.Net.Documents.Field.FieldsData Lucene.Net.Documents.Field.m_tokenStream Lucene.Net.Documents.Field.m_boost Lucene.Net.Documents.Field.GetStringValue() Field.GetStringValue(IFormatProvider) Field.GetStringValue(String) Field.GetStringValue(String, IFormatProvider) Lucene.Net.Documents.Field.GetReaderValue() Lucene.Net.Documents.Field.GetTokenStreamValue() Field.SetStringValue(String) Field.SetReaderValue(TextReader) Lucene.Net.Documents.Field.SetBytesValue(Lucene.Net.Util.BytesRef) Field.SetBytesValue(Byte[]) Field.SetByteValue(Byte) Field.SetInt16Value(Int16) Field.SetInt32Value(Int32) Field.SetInt64Value(Int64) Field.SetSingleValue(Single) Field.SetDoubleValue(Double) Lucene.Net.Documents.Field.SetTokenStream(Lucene.Net.Analysis.TokenStream) Lucene.Net.Documents.Field.Name Lucene.Net.Documents.Field.Boost Lucene.Net.Documents.Field.GetNumericValue() Lucene.Net.Documents.Field.NumericType Lucene.Net.Documents.Field.GetByteValue() Lucene.Net.Documents.Field.GetInt16Value() Lucene.Net.Documents.Field.GetInt32Value() Lucene.Net.Documents.Field.GetInt64Value() Lucene.Net.Documents.Field.GetSingleValue() Lucene.Net.Documents.Field.GetDoubleValue() Lucene.Net.Documents.Field.GetBinaryValue() Lucene.Net.Documents.Field.FieldType Lucene.Net.Documents.Field.IndexableFieldType Lucene.Net.Documents.Field.GetTokenStream(Lucene.Net.Analysis.Analyzer) Lucene.Net.Documents.Field.TranslateFieldType(Lucene.Net.Documents.Field.Store, Lucene.Net.Documents.Field.Index, Lucene.Net.Documents.Field.TermVector) 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) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class SingleAssociationFacetField : AssociationFacetField, IIndexableField Constructors | Improve this Doc View Source SingleAssociationFacetField(Single, String, String[]) Creates this from dim and path and a System.Single association Declaration public SingleAssociationFacetField(float assoc, string dim, params string[] path) Parameters Type Name Description System.Single assoc System.String dim System.String [] path Methods | Improve this Doc View Source BytesRefToSingle(BytesRef) Decodes a previously encoded System.Single . NOTE: This was bytesRefToFloat() in Lucene Declaration public static float BytesRefToSingle(BytesRef b) Parameters Type Name Description Lucene.Net.Util.BytesRef b Returns Type Description System.Single | Improve this Doc View Source SingleToBytesRef(Single) Encodes a System.Single as a 4-byte Lucene.Net.Util.BytesRef . NOTE: This was floatToBytesRef() in Lucene Declaration public static BytesRef SingleToBytesRef(float v) Parameters Type Name Description System.Single v Returns Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source ToString() Declaration public override string ToString() Returns Type Description System.String Overrides AssociationFacetField.ToString() Implements Lucene.Net.Index.IIndexableField"
  },
  "Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html": {
    "href": "Lucene.Net.Facet.Taxonomy.SingleTaxonomyFacets.html",
    "title": "Class SingleTaxonomyFacets | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SingleTaxonomyFacets Base class for all taxonomy-based facets that aggregate to a per-ords float[] . NOTE: This was FloatTaxonomyFacets in Lucene Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumSingleAssociations TaxonomyFacetSumValueSource Inherited Members TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class SingleTaxonomyFacets : TaxonomyFacets Constructors | Improve this Doc View Source SingleTaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected SingleTaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_values Per-ordinal value. Declaration protected readonly float[] m_values Field Value Type Description System.Single [] Methods | Improve this Doc View Source GetSpecificValue(String, String[]) Declaration public override float GetSpecificValue(string dim, params string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Single Overrides Facets.GetSpecificValue(String, String[]) | Improve this Doc View Source GetTopChildren(Int32, String, String[]) Declaration public override FacetResult GetTopChildren(int topN, string dim, params string[] path) Parameters Type Name Description System.Int32 topN System.String dim System.String [] path Returns Type Description FacetResult Overrides Facets.GetTopChildren(Int32, String, String[]) | Improve this Doc View Source Rollup() Rolls up any single-valued hierarchical dimensions. Declaration protected virtual void Rollup()"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyFacetCounts.html",
    "title": "Class TaxonomyFacetCounts | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyFacetCounts Reads from any OrdinalsReader ; use FastTaxonomyFacetCounts if you are using the default encoding from BinaryDocValues . This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets TaxonomyFacetCounts Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetCounts : Int32TaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetCounts(OrdinalsReader, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetCounts , which also counts all facet labels. Use this for a non-default OrdinalsReader ; otherwise use FastTaxonomyFacetCounts . Declaration public TaxonomyFacetCounts(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description OrdinalsReader ordinalsReader TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyFacets.html",
    "title": "Class TaxonomyFacets | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyFacets Base class for all taxonomy-based facets impls. Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets SingleTaxonomyFacets Inherited Members Facets.GetTopChildren(Int32, String, String[]) Facets.GetSpecificValue(String, String[]) 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class TaxonomyFacets : Facets Constructors | Improve this Doc View Source TaxonomyFacets(String, TaxonomyReader, FacetsConfig) Sole constructor. Declaration protected TaxonomyFacets(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config Fields | Improve this Doc View Source m_children Maps parent ordinal to its child, or -1 if the parent is childless. Declaration protected readonly int[] m_children Field Value Type Description System.Int32 [] | Improve this Doc View Source m_config FacetsConfig provided to the constructor. Declaration protected readonly FacetsConfig m_config Field Value Type Description FacetsConfig | Improve this Doc View Source m_indexFieldName Index field name provided to the constructor. Declaration protected readonly string m_indexFieldName Field Value Type Description System.String | Improve this Doc View Source m_siblings Maps an ordinal to its sibling, or -1 if there is no sibling. Declaration protected readonly int[] m_siblings Field Value Type Description System.Int32 [] | Improve this Doc View Source m_taxoReader TaxonomyReader provided to the constructor. Declaration protected readonly TaxonomyReader m_taxoReader Field Value Type Description TaxonomyReader Methods | Improve this Doc View Source GetAllDims(Int32) Declaration public override IList<FacetResult> GetAllDims(int topN) Parameters Type Name Description System.Int32 topN Returns Type Description System.Collections.Generic.IList < FacetResult > Overrides Facets.GetAllDims(Int32) | Improve this Doc View Source VerifyDim(String) Throws System.ArgumentException if the dimension is not recognized. Otherwise, returns the FacetsConfig.DimConfig for this dimension. Declaration protected virtual FacetsConfig.DimConfig VerifyDim(string dim) Parameters Type Name Description System.String dim Returns Type Description FacetsConfig.DimConfig"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumInt32Associations.html",
    "title": "Class TaxonomyFacetSumInt32Associations | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyFacetSumInt32Associations Aggregates sum of System.Int32 values previously indexed with Int32AssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumIntAssociations in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets TaxonomyFacets Int32TaxonomyFacets TaxonomyFacetSumInt32Associations Inherited Members Int32TaxonomyFacets.m_values Int32TaxonomyFacets.Rollup() Int32TaxonomyFacets.GetSpecificValue(String, String[]) Int32TaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumInt32Associations : Int32TaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumInt32Associations(TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumInt32Associations against the default index field. Declaration public TaxonomyFacetSumInt32Associations(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source TaxonomyFacetSumInt32Associations(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumInt32Associations against the specified index field. Declaration public TaxonomyFacetSumInt32Associations(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumSingleAssociations.html",
    "title": "Class TaxonomyFacetSumSingleAssociations | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyFacetSumSingleAssociations Aggregates sum of System.Single values previously indexed with SingleAssociationFacetField , assuming the default encoding. NOTE: This was TaxonomyFacetSumFloatAssociations in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumSingleAssociations Inherited Members SingleTaxonomyFacets.m_values SingleTaxonomyFacets.Rollup() SingleTaxonomyFacets.GetSpecificValue(String, String[]) SingleTaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumSingleAssociations : SingleTaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumSingleAssociations(TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumSingleAssociations against the default index field. Declaration public TaxonomyFacetSumSingleAssociations(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc | Improve this Doc View Source TaxonomyFacetSumSingleAssociations(String, TaxonomyReader, FacetsConfig, FacetsCollector) Create TaxonomyFacetSumSingleAssociations against the specified index field. Declaration public TaxonomyFacetSumSingleAssociations(string indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Parameters Type Name Description System.String indexFieldName TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource Aggregates sum of values from Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32) and Lucene.Net.Queries.Function.FunctionValues.DoubleVal(System.Int32,System.Double[]) , for each facet label. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Facets TaxonomyFacets SingleTaxonomyFacets TaxonomyFacetSumValueSource Inherited Members SingleTaxonomyFacets.m_values SingleTaxonomyFacets.Rollup() SingleTaxonomyFacets.GetSpecificValue(String, String[]) SingleTaxonomyFacets.GetTopChildren(Int32, String, String[]) TaxonomyFacets.m_indexFieldName TaxonomyFacets.m_taxoReader TaxonomyFacets.m_config TaxonomyFacets.m_children TaxonomyFacets.m_siblings TaxonomyFacets.VerifyDim(String) TaxonomyFacets.GetAllDims(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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class TaxonomyFacetSumValueSource : SingleTaxonomyFacets Constructors | Improve this Doc View Source TaxonomyFacetSumValueSource(OrdinalsReader, TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided Lucene.Net.Queries.Function.ValueSource , and pulls ordinals from the provided OrdinalsReader . Declaration public TaxonomyFacetSumValueSource(OrdinalsReader ordinalsReader, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, ValueSource valueSource) Parameters Type Name Description OrdinalsReader ordinalsReader TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc Lucene.Net.Queries.Function.ValueSource valueSource | Improve this Doc View Source TaxonomyFacetSumValueSource(TaxonomyReader, FacetsConfig, FacetsCollector, ValueSource) Aggreggates float facet values from the provided Lucene.Net.Queries.Function.ValueSource , pulling ordinals using DocValuesOrdinalsReader against the default indexed facet field DEFAULT_INDEX_FIELD_NAME . Declaration public TaxonomyFacetSumValueSource(TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc, ValueSource valueSource) Parameters Type Name Description TaxonomyReader taxoReader FacetsConfig config FacetsCollector fc Lucene.Net.Queries.Function.ValueSource valueSource"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumValueSource.ScoreValueSource.html",
    "title": "Class TaxonomyFacetSumValueSource.ScoreValueSource | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyFacetSumValueSource.ScoreValueSource Lucene.Net.Queries.Function.ValueSource that returns the score for each hit; use this to aggregate the sum of all hit scores for each facet label. Inheritance System.Object Lucene.Net.Queries.Function.ValueSource TaxonomyFacetSumValueSource.ScoreValueSource Inherited Members Lucene.Net.Queries.Function.ValueSource.ToString() Lucene.Net.Queries.Function.ValueSource.CreateWeight(System.Collections.IDictionary, Lucene.Net.Search.IndexSearcher) Lucene.Net.Queries.Function.ValueSource.NewContext(Lucene.Net.Search.IndexSearcher) Lucene.Net.Queries.Function.ValueSource.GetSortField(System.Boolean) System.Object.Equals(System.Object, System.Object) System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) Namespace : Lucene.Net.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class ScoreValueSource : ValueSource Constructors | Improve this Doc View Source ScoreValueSource() Sole constructor. Declaration public ScoreValueSource() Methods | Improve this Doc View Source Equals(TaxonomyFacetSumValueSource.ScoreValueSource) Declaration protected bool Equals(TaxonomyFacetSumValueSource.ScoreValueSource other) Parameters Type Name Description TaxonomyFacetSumValueSource.ScoreValueSource other Returns Type Description System.Boolean | 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 Lucene.Net.Queries.Function.ValueSource.Equals(System.Object) | Improve this Doc View Source GetDescription() Declaration public override string GetDescription() Returns Type Description System.String Overrides Lucene.Net.Queries.Function.ValueSource.GetDescription() | Improve this Doc View Source GetHashCode() Declaration public override int GetHashCode() Returns Type Description System.Int32 Overrides Lucene.Net.Queries.Function.ValueSource.GetHashCode() | Improve this Doc View Source GetValues(IDictionary, AtomicReaderContext) Declaration public override FunctionValues GetValues(IDictionary context, AtomicReaderContext readerContext) Parameters Type Name Description System.Collections.IDictionary context Lucene.Net.Index.AtomicReaderContext readerContext Returns Type Description Lucene.Net.Queries.Function.FunctionValues Overrides Lucene.Net.Queries.Function.ValueSource.GetValues(System.Collections.IDictionary, Lucene.Net.Index.AtomicReaderContext)"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenEnumerator.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyReader.ChildrenEnumerator.html",
    "title": "Class TaxonomyReader.ChildrenEnumerator | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyReader.ChildrenEnumerator An iterator over a category's children. Inheritance System.Object TaxonomyReader.ChildrenEnumerator 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public class ChildrenEnumerator Properties | Improve this Doc View Source Current Gets the current child. Returns INVALID_ORDINAL if positioned before the first child or after the last child. Declaration public virtual int Current { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source MoveNext() Move to the next child ordinal. Returns false if there are no more children. Declaration public virtual bool MoveNext() Returns Type Description System.Boolean"
  },
  "Lucene.Net.Facet.Taxonomy.TaxonomyReader.html": {
    "href": "Lucene.Net.Facet.Taxonomy.TaxonomyReader.html",
    "title": "Class TaxonomyReader | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TaxonomyReader TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time. A TaxonomyReader holds a list of categories. Each category has a serial number which we call an \"ordinal\", and a hierarchical \"path\" name: The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted. The path is a CategoryPath object specifying the category's position in the hierarchy. Notes about concurrent access to the taxonomy: An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called \"point in time\" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called. In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index. This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a \"too new\" taxonomy not being consistent with an older index. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object TaxonomyReader DirectoryTaxonomyReader Implements System.IDisposable 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.Facet.Taxonomy Assembly : Lucene.Net.Facet.dll Syntax public abstract class TaxonomyReader : IDisposable Constructors | Improve this Doc View Source TaxonomyReader() Sole constructor. Declaration protected TaxonomyReader() Fields | Improve this Doc View Source INVALID_ORDINAL Ordinals are always non-negative, so a negative ordinal can be used to signify an error. Methods here return INVALID_ORDINAL (-1) in this case. Declaration public const int INVALID_ORDINAL = -1 Field Value Type Description System.Int32 | Improve this Doc View Source ROOT_ORDINAL The root category (the category with the empty path) always has the ordinal 0, to which we give a name ROOT_ORDINAL. GetOrdinal(FacetLabel) of an empty path will always return ROOT_ORDINAL , and GetPath(Int32) with ROOT_ORDINAL will return the empty path. Declaration public const int ROOT_ORDINAL = 0 Field Value Type Description System.Int32 Properties | Improve this Doc View Source CommitUserData Retrieve user committed data. Declaration public abstract IDictionary<string, string> CommitUserData { get; } Property Value Type Description System.Collections.Generic.IDictionary < System.String , System.String > See Also CommitData | Improve this Doc View Source Count Returns the number of categories in the taxonomy. Note that the number of categories returned is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). Declaration public abstract int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source ParallelTaxonomyArrays Returns a ParallelTaxonomyArrays object which can be used to efficiently traverse the taxonomy tree. Declaration public abstract ParallelTaxonomyArrays ParallelTaxonomyArrays { get; } Property Value Type Description ParallelTaxonomyArrays | Improve this Doc View Source RefCount Returns the current refCount for this taxonomy reader. Declaration public int RefCount { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source DecRef() Expert: decreases the refCount of this TaxonomyReader instance. If the refCount drops to 0 this taxonomy reader is closed. Declaration public void DecRef() | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Performs the actual task of closing the resources that are used by the taxonomy reader. Declaration protected abstract void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source DoOpenIfChanged() Implements the actual opening of a new TaxonomyReader instance if the taxonomy has changed. Declaration protected abstract TaxonomyReader DoOpenIfChanged() Returns Type Description TaxonomyReader See Also OpenIfChanged<T>(T) | Improve this Doc View Source EnsureOpen() Throws System.ObjectDisposedException if this Lucene.Net.Index.IndexReader is disposed Declaration protected void EnsureOpen() | Improve this Doc View Source GetChildren(Int32) Returns an iterator over the children of the given ordinal. Declaration public virtual TaxonomyReader.ChildrenEnumerator GetChildren(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description TaxonomyReader.ChildrenEnumerator | Improve this Doc View Source GetOrdinal(FacetLabel) Returns the ordinal of the category given as a path. The ordinal is the category's serial number, an integer which starts with 0 and grows as more categories are added (note that once a category is added, it can never be deleted). Declaration public abstract int GetOrdinal(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 the category's ordinal or INVALID_ORDINAL if the category wasn't found. | Improve this Doc View Source GetOrdinal(String, String[]) Returns ordinal for the dim + path. Declaration public virtual int GetOrdinal(string dim, string[] path) Parameters Type Name Description System.String dim System.String [] path Returns Type Description System.Int32 | Improve this Doc View Source GetPath(Int32) Returns the path name of the category with the given ordinal. Declaration public abstract FacetLabel GetPath(int ordinal) Parameters Type Name Description System.Int32 ordinal Returns Type Description FacetLabel | Improve this Doc View Source IncRef() Expert: increments the refCount of this TaxonomyReader instance. RefCounts can be used to determine when a taxonomy reader can be closed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef() , in a finally clause; otherwise the reader may never be disposed. Declaration public void IncRef() | Improve this Doc View Source OpenIfChanged<T>(T) If the taxonomy has changed since the provided reader was opened, open and return a new TaxonomyReader ; else, return null . The new reader, if not null , will be the same type of reader as the one given to this method. This method is typically far less costly than opening a fully new TaxonomyReader as it shares resources with the provided TaxonomyReader , when possible. Declaration public static T OpenIfChanged<T>(T oldTaxoReader) where T : TaxonomyReader Parameters Type Name Description T oldTaxoReader Returns Type Description T Type Parameters Name Description T | Improve this Doc View Source TryIncRef() Expert: increments the refCount of this TaxonomyReader instance only if it has not been closed yet. Returns true on success. Declaration public bool TryIncRef() Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.Cl2oTaxonomyWriterCache.html",
    "title": "Class Cl2oTaxonomyWriterCache | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class Cl2oTaxonomyWriterCache ITaxonomyWriterCache using CompactLabelToOrdinal . Although called cache, it maintains in memory all the mappings from category to ordinal, relying on that CompactLabelToOrdinal is an efficient mapping for this purpose. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object Cl2oTaxonomyWriterCache Implements ITaxonomyWriterCache System.IDisposable 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class Cl2oTaxonomyWriterCache : ITaxonomyWriterCache, IDisposable Constructors | Improve this Doc View Source Cl2oTaxonomyWriterCache(Int32, Single, Int32) Sole constructor. Declaration public Cl2oTaxonomyWriterCache(int initialCapcity, float loadFactor, int numHashArrays) Parameters Type Name Description System.Int32 initialCapcity System.Single loadFactor System.Int32 numHashArrays Properties | Improve this Doc View Source IsFull Declaration public virtual bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Get(FacetLabel) Declaration public virtual int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source GetMemoryUsage() Returns the number of bytes in memory used by this object. Declaration public virtual int GetMemoryUsage() Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Declaration public virtual bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean Implements ITaxonomyWriterCache System.IDisposable"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.CollisionMap.html",
    "title": "Class CollisionMap | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class CollisionMap HashMap to store colliding labels. See CompactLabelToOrdinal for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object CollisionMap 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class CollisionMap Properties | Improve this Doc View Source Capacity How many slots are allocated. Declaration public virtual int Capacity { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Count How many mappings. Declaration public virtual int Count { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32, Int32) Add another mapping. Declaration public virtual int AddLabel(FacetLabel label, int hash, int cid) Parameters Type Name Description FacetLabel label System.Int32 hash System.Int32 cid Returns Type Description System.Int32 | Improve this Doc View Source AddLabelOffset(Int32, Int32, Int32) This method does not check if the same value is already in the map because we pass in an char-array offset, so so we now that we're in resize-mode here. Declaration public virtual void AddLabelOffset(int hash, int offset, int cid) Parameters Type Name Description System.Int32 hash System.Int32 offset System.Int32 cid | Improve this Doc View Source Get(FacetLabel, Int32) Return the mapping, or INVALID_ORDINAL if the label isn't recognized. Declaration public virtual int Get(FacetLabel label, int hash) Parameters Type Name Description FacetLabel label System.Int32 hash Returns Type Description System.Int32"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.html",
    "title": "Class CompactLabelToOrdinal | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class CompactLabelToOrdinal This is a very efficient LabelToOrdinal implementation that uses a Lucene.Net.Facet.Taxonomy.WriterCache.CharBlockArray to store all labels and a configurable number of Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to reference the labels. Since the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s don't handle collisions, a CollisionMap is used to store the colliding labels. This data structure grows by adding a new HashArray whenever the number of collisions in the CollisionMap exceeds Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor GetMaxOrdinal(). Growing also includes reinserting all colliding labels into the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to possibly reduce the number of collisions. For setting the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor see CompactLabelToOrdinal(Int32, Single, Int32) . This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LabelToOrdinal CompactLabelToOrdinal Inherited Members LabelToOrdinal.m_counter LabelToOrdinal.INVALID_ORDINAL LabelToOrdinal.MaxOrdinal LabelToOrdinal.GetNextOrdinal() 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class CompactLabelToOrdinal : LabelToOrdinal Constructors | Improve this Doc View Source CompactLabelToOrdinal(Int32, Single, Int32) Sole constructor. Declaration public CompactLabelToOrdinal(int initialCapacity, float loadFactor, int numHashArrays) Parameters Type Name Description System.Int32 initialCapacity System.Single loadFactor System.Int32 numHashArrays Fields | Improve this Doc View Source DefaultLoadFactor Default maximum load factor. Declaration public const float DefaultLoadFactor = 0.15F Field Value Type Description System.Single | Improve this Doc View Source TERMINATOR_CHAR Declaration public const char TERMINATOR_CHAR = '\\uffff' Field Value Type Description System.Char Properties | Improve this Doc View Source SizeOfMap How many labels. Declaration public virtual int SizeOfMap { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32) Declaration public override void AddLabel(FacetLabel label, int ordinal) Parameters Type Name Description FacetLabel label System.Int32 ordinal Overrides LabelToOrdinal.AddLabel(FacetLabel, Int32) | Improve this Doc View Source GetOrdinal(FacetLabel) Declaration public override int GetOrdinal(FacetLabel label) Parameters Type Name Description FacetLabel label Returns Type Description System.Int32 Overrides LabelToOrdinal.GetOrdinal(FacetLabel)"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.html",
    "title": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Facet.Taxonomy.WriterCache <!-- 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. --> Improves indexing time by caching a map of CategoryPath to their Ordinal. Classes Cl2oTaxonomyWriterCache ITaxonomyWriterCache using CompactLabelToOrdinal . Although called cache, it maintains in memory all the mappings from category to ordinal, relying on that CompactLabelToOrdinal is an efficient mapping for this purpose. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CollisionMap HashMap to store colliding labels. See CompactLabelToOrdinal for details. This is a Lucene.NET EXPERIMENTAL API, use at your own risk CompactLabelToOrdinal This is a very efficient LabelToOrdinal implementation that uses a Lucene.Net.Facet.Taxonomy.WriterCache.CharBlockArray to store all labels and a configurable number of Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to reference the labels. Since the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s don't handle collisions, a CollisionMap is used to store the colliding labels. This data structure grows by adding a new HashArray whenever the number of collisions in the CollisionMap exceeds Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor GetMaxOrdinal(). Growing also includes reinserting all colliding labels into the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.HashArray s to possibly reduce the number of collisions. For setting the Lucene.Net.Facet.Taxonomy.WriterCache.CompactLabelToOrdinal.loadFactor see CompactLabelToOrdinal(Int32, Single, Int32) . This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LabelToOrdinal Abstract class for storing Label->Ordinal mappings in a taxonomy. This is a Lucene.NET EXPERIMENTAL API, use at your own risk LruTaxonomyWriterCache LRU ITaxonomyWriterCache - good choice for huge taxonomies. This is a Lucene.NET EXPERIMENTAL API, use at your own risk NameHashInt32CacheLru An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. It uses as key, hash of the path instead of the path. This way the cache takes less RAM, but correctness depends on assuming no collisions. NOTE: this was NameHashIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk NameInt32CacheLru An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. NOTE: This was NameIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces INameInt32CacheLru Public members of the NameInt32CacheLru that are shared between instances. ITaxonomyWriterCache ITaxonomyWriterCache is a relatively simple interface for a cache of category->ordinal mappings, used in ITaxonomyWriter implementations (such as DirectoryTaxonomyWriter ). It basically has Put(FacetLabel, Int32) methods for adding a mapping, and Get(FacetLabel) for looking a mapping up the cache. The cache does not guarantee to hold everything that has been put into it, and might in fact selectively delete some of the mappings (e.g., the ones least recently used). This means that if Get(FacetLabel) returns a negative response, it does not necessarily mean that the category doesn't exist - just that it is not in the cache. The caller can only infer that the category doesn't exist if it knows the cache to be complete (because all the categories were loaded into the cache, and since then no Put(FacetLabel, Int32) returned true). However, if it does so, it should clear out large parts of the cache at once, because the user will typically need to work hard to recover from every cache cleanup (see Put(FacetLabel, Int32) 's return value). NOTE: the cache may be accessed concurrently by multiple threads, therefore cache implementations should take this into consideration. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Enums LruTaxonomyWriterCache.LRUType Determines cache type. For guaranteed correctness - not relying on no-collisions in the hash function, LRU_STRING should be used."
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.INameInt32CacheLru.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.INameInt32CacheLru.html",
    "title": "Interface INameInt32CacheLru | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface INameInt32CacheLru Public members of the NameInt32CacheLru that are shared between instances. Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public interface INameInt32CacheLru Properties | Improve this Doc View Source Count Number of entries currently in the cache. Declaration int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Limit Maximum number of cache entries before eviction. Declaration int Limit { get; } Property Value Type Description System.Int32"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.ITaxonomyWriterCache.html",
    "title": "Interface ITaxonomyWriterCache | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface ITaxonomyWriterCache ITaxonomyWriterCache is a relatively simple interface for a cache of category->ordinal mappings, used in ITaxonomyWriter implementations (such as DirectoryTaxonomyWriter ). It basically has Put(FacetLabel, Int32) methods for adding a mapping, and Get(FacetLabel) for looking a mapping up the cache. The cache does not guarantee to hold everything that has been put into it, and might in fact selectively delete some of the mappings (e.g., the ones least recently used). This means that if Get(FacetLabel) returns a negative response, it does not necessarily mean that the category doesn't exist - just that it is not in the cache. The caller can only infer that the category doesn't exist if it knows the cache to be complete (because all the categories were loaded into the cache, and since then no Put(FacetLabel, Int32) returned true). However, if it does so, it should clear out large parts of the cache at once, because the user will typically need to work hard to recover from every cache cleanup (see Put(FacetLabel, Int32) 's return value). NOTE: the cache may be accessed concurrently by multiple threads, therefore cache implementations should take this into consideration. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inherited Members System.IDisposable.Dispose() Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public interface ITaxonomyWriterCache : IDisposable Properties | Improve this Doc View Source IsFull Returns true if the cache is full, such that the next Put(FacetLabel, Int32) will evict entries from it, false otherwise. Declaration bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Clears the content of the cache. Unlike System.IDisposable.Dispose() , the caller can assume that the cache is still operable after this method returns. Declaration void Clear() | Improve this Doc View Source Get(FacetLabel) Lookup a category in the cache, returning its ordinal, or a negative number if the category is not in the cache. It is up to the caller to remember what a negative response means: If the caller knows the cache is complete (it was initially fed with all the categories, and since then Put(FacetLabel, Int32) never returned true) it means the category does not exist. Otherwise, the category might still exist, but just be missing from the cache. Declaration int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Add a category to the cache, with the given ordinal as the value. If the implementation keeps only a partial cache (e.g., an LRU cache) and finds that its cache is full, it should clear up part of the cache and return true . Otherwise, it should return false . The reason why the caller needs to know if part of the cache was cleared is that in that case it will have to commit its on-disk index (so that all the latest category additions can be searched on disk, if we can't rely on the cache to contain them). Ordinals should be non-negative. Currently there is no defined way to specify that a cache should remember a category does NOT exist. It doesn't really matter, because normally the next thing we do after finding that a category does not exist is to add it. Declaration bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.LabelToOrdinal.html",
    "title": "Class LabelToOrdinal | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class LabelToOrdinal Abstract class for storing Label->Ordinal mappings in a taxonomy. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LabelToOrdinal CompactLabelToOrdinal 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public abstract class LabelToOrdinal Constructors | Improve this Doc View Source LabelToOrdinal() Default constructor. Declaration protected LabelToOrdinal() Fields | Improve this Doc View Source INVALID_ORDINAL Returned by GetOrdinal(FacetLabel) when the label isn't recognized. Declaration public const int INVALID_ORDINAL = -2 Field Value Type Description System.Int32 | Improve this Doc View Source m_counter How many ordinals we've seen. Declaration protected int m_counter Field Value Type Description System.Int32 Properties | Improve this Doc View Source MaxOrdinal return the maximal Ordinal assigned so far Declaration public virtual int MaxOrdinal { get; } Property Value Type Description System.Int32 Methods | Improve this Doc View Source AddLabel(FacetLabel, Int32) Adds a new label if its not yet in the table. Throws an System.ArgumentException if the same label with a different ordinal was previoulsy added to this table. Declaration public abstract void AddLabel(FacetLabel label, int ordinal) Parameters Type Name Description FacetLabel label System.Int32 ordinal | Improve this Doc View Source GetNextOrdinal() Returns the next unassigned ordinal. The default behavior of this method is to simply increment a counter. Declaration public virtual int GetNextOrdinal() Returns Type Description System.Int32 | Improve this Doc View Source GetOrdinal(FacetLabel) Returns the ordinal assigned to the given label, or INVALID_ORDINAL if the label cannot be found in this table. Declaration public abstract int GetOrdinal(FacetLabel label) Parameters Type Name Description FacetLabel label Returns Type Description System.Int32"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.html",
    "title": "Class LruTaxonomyWriterCache | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class LruTaxonomyWriterCache LRU ITaxonomyWriterCache - good choice for huge taxonomies. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object LruTaxonomyWriterCache Implements ITaxonomyWriterCache System.IDisposable 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class LruTaxonomyWriterCache : ITaxonomyWriterCache, IDisposable Constructors | Improve this Doc View Source LruTaxonomyWriterCache(Int32) Creates this with LRU_HASHED method. Declaration public LruTaxonomyWriterCache(int cacheSize) Parameters Type Name Description System.Int32 cacheSize | Improve this Doc View Source LruTaxonomyWriterCache(Int32, LruTaxonomyWriterCache.LRUType) Creates this with the specified method. Declaration public LruTaxonomyWriterCache(int cacheSize, LruTaxonomyWriterCache.LRUType lruType) Parameters Type Name Description System.Int32 cacheSize LruTaxonomyWriterCache.LRUType lruType Properties | Improve this Doc View Source IsFull Declaration public virtual bool IsFull { get; } Property Value Type Description System.Boolean Methods | Improve this Doc View Source Clear() Declaration public virtual void Clear() | Improve this Doc View Source Dispose() Declaration public void Dispose() | Improve this Doc View Source Dispose(Boolean) Declaration protected virtual void Dispose(bool disposing) Parameters Type Name Description System.Boolean disposing | Improve this Doc View Source Get(FacetLabel) Declaration public virtual int Get(FacetLabel categoryPath) Parameters Type Name Description FacetLabel categoryPath Returns Type Description System.Int32 | Improve this Doc View Source Put(FacetLabel, Int32) Declaration public virtual bool Put(FacetLabel categoryPath, int ordinal) Parameters Type Name Description FacetLabel categoryPath System.Int32 ordinal Returns Type Description System.Boolean Implements ITaxonomyWriterCache System.IDisposable"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.LruTaxonomyWriterCache.LRUType.html",
    "title": "Enum LruTaxonomyWriterCache.LRUType | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Enum LruTaxonomyWriterCache.LRUType Determines cache type. For guaranteed correctness - not relying on no-collisions in the hash function, LRU_STRING should be used. Namespace : Lucene.Net.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public enum LRUType Fields Name Description LRU_HASHED Use the label's hash as the key; this can lead to silent conflicts! LRU_STRING Use the label as the hash key; this is always correct but will usually use more RAM."
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLru.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.NameHashInt32CacheLru.html",
    "title": "Class NameHashInt32CacheLru | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class NameHashInt32CacheLru An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. It uses as key, hash of the path instead of the path. This way the cache takes less RAM, but correctness depends on assuming no collisions. NOTE: this was NameHashIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NameHashInt32CacheLru Implements INameInt32CacheLru 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class NameHashInt32CacheLru : IInternalNameInt32CacheLru, INameInt32CacheLru Properties | Improve this Doc View Source Count Number of entries currently in the cache. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Limit Maximum number of cache entries before eviction. Declaration public int Limit { get; } Property Value Type Description System.Int32 Implements INameInt32CacheLru"
  },
  "Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLru.html": {
    "href": "Lucene.Net.Facet.Taxonomy.WriterCache.NameInt32CacheLru.html",
    "title": "Class NameInt32CacheLru | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class NameInt32CacheLru An an LRU cache of mapping from name to int. Used to cache Ordinals of category paths. NOTE: This was NameIntCacheLRU in Lucene This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object NameInt32CacheLru Implements INameInt32CacheLru 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.Facet.Taxonomy.WriterCache Assembly : Lucene.Net.Facet.dll Syntax public class NameInt32CacheLru : IInternalNameInt32CacheLru, INameInt32CacheLru Remarks Note: Nothing in this class is synchronized. The caller is assumed to be synchronized so that no two methods of this class are called concurrently. Properties | Improve this Doc View Source Count Number of entries currently in the cache. Declaration public int Count { get; } Property Value Type Description System.Int32 | Improve this Doc View Source Limit Maximum number of cache entries before eviction. Declaration public int Limit { get; } Property Value Type Description System.Int32 Implements INameInt32CacheLru"
  },
  "Lucene.Net.Facet.TopOrdAndInt32Queue.html": {
    "href": "Lucene.Net.Facet.TopOrdAndInt32Queue.html",
    "title": "Class TopOrdAndInt32Queue | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TopOrdAndInt32Queue Keeps highest results, first by largest System.Int32 value, then tie break by smallest ord. NOTE: This was TopOrdAndIntQueue in Lucene Inheritance System.Object Lucene.Net.Util.PriorityQueue < OrdAndValue < System.Int32 >> TopOrdAndInt32Queue Inherited Members Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.GetSentinelObject() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.Add(Lucene.Net.Facet.OrdAndValue<System.Int32>) Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.Insert(Lucene.Net.Facet.OrdAndValue<System.Int32>) Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.InsertWithOverflow(Lucene.Net.Facet.OrdAndValue<System.Int32>) Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.Top Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.Pop() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.UpdateTop() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.Count Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.Clear() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.HeapArray 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class TopOrdAndInt32Queue : PriorityQueue<OrdAndValue<int>> Constructors | Improve this Doc View Source TopOrdAndInt32Queue(Int32) Sole constructor. Declaration public TopOrdAndInt32Queue(int topN) Parameters Type Name Description System.Int32 topN Methods | Improve this Doc View Source LessThan(OrdAndValue<Int32>, OrdAndValue<Int32>) Declaration protected override bool LessThan(OrdAndValue<int> a, OrdAndValue<int> b) Parameters Type Name Description OrdAndValue < System.Int32 > a OrdAndValue < System.Int32 > b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Int32>>.LessThan(Lucene.Net.Facet.OrdAndValue<System.Int32>, Lucene.Net.Facet.OrdAndValue<System.Int32>)"
  },
  "Lucene.Net.Facet.TopOrdAndSingleQueue.html": {
    "href": "Lucene.Net.Facet.TopOrdAndSingleQueue.html",
    "title": "Class TopOrdAndSingleQueue | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class TopOrdAndSingleQueue Keeps highest results, first by largest System.Single value, then tie break by smallest ord. NOTE: This was TopOrdAndFloatQueue in Lucene Inheritance System.Object Lucene.Net.Util.PriorityQueue < OrdAndValue < System.Single >> TopOrdAndSingleQueue Inherited Members Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.GetSentinelObject() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.Add(Lucene.Net.Facet.OrdAndValue<System.Single>) Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.Insert(Lucene.Net.Facet.OrdAndValue<System.Single>) Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.InsertWithOverflow(Lucene.Net.Facet.OrdAndValue<System.Single>) Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.Top Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.Pop() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.UpdateTop() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.Count Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.Clear() Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.HeapArray 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.Facet Assembly : Lucene.Net.Facet.dll Syntax public class TopOrdAndSingleQueue : PriorityQueue<OrdAndValue<float>> Constructors | Improve this Doc View Source TopOrdAndSingleQueue(Int32) Sole constructor. Declaration public TopOrdAndSingleQueue(int topN) Parameters Type Name Description System.Int32 topN Methods | Improve this Doc View Source LessThan(OrdAndValue<Single>, OrdAndValue<Single>) Declaration protected override bool LessThan(OrdAndValue<float> a, OrdAndValue<float> b) Parameters Type Name Description OrdAndValue < System.Single > a OrdAndValue < System.Single > b Returns Type Description System.Boolean Overrides Lucene.Net.Util.PriorityQueue<Lucene.Net.Facet.OrdAndValue<System.Single>>.LessThan(Lucene.Net.Facet.OrdAndValue<System.Single>, Lucene.Net.Facet.OrdAndValue<System.Single>)"
  },
  "package.html": {
    "href": "package.html",
    "title": "faceted search | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "faceted search <!-- 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 provides multiple methods for computing facet counts and value aggregations: * Taxonomy-based methods rely on a separate taxonomy index to map hierarchical facet paths to global int ordinals for fast counting at search time; these methods can compute counts (( FastTaxonomyFacetCounts , TaxonomyFacetCounts ) aggregate long or double values <xref:Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumIntAssociations>, <xref:Lucene.Net.Facet.Taxonomy.TaxonomyFacetSumFloatAssociations>, TaxonomyFacetSumValueSource . Add FacetField or AssociationFacetField to your documents at index time to use taxonomy-based methods. * Sorted-set doc values method does not require a separate taxonomy index, and computes counts based on sorted set doc values fields (<xref:Lucene.Net.Facet.Sortedset.SortedSetDocValuesFacetCounts>). Add <xref:Lucene.Net.Facet.Sortedset.SortedSetDocValuesFacetField> to your documents at index time to use sorted set facet counts. * Range faceting <xref:Lucene.Net.Facet.Range.LongRangeFacetCounts>, DoubleRangeFacetCounts compute counts for a dynamic numeric range from a provided <xref:Lucene.Net.Queries.Function.ValueSource> (previously indexed numeric field, or a dynamic expression such as distance). At search time you first run your search, but pass a FacetsCollector to gather all hits (and optionally, scores for each hit). Then, instantiate whichever facet methods you'd like to use to compute aggregates. Finally, all methods implement a common Facets base API that you use to obtain specific facet counts. The various #search utility methods are useful for doing an \"ordinary\" search (sorting by score, or by a specified Sort) but also collecting into a FacetsCollector for subsequent faceting."
  }
}